您的位置:首页 > 编程语言 > C语言/C++

C++主要特性/优势

2016-07-22 11:38 204 查看
总结c++相对于c的个性之处,主要包括:类与继承/派生,函数/变量的多态/重载,虚函数与纯虚函数,抽象类,数据封装。

1.类的继承/派生

类的定义形式:

class FA
{
public:
int a;
int b;
fun1()
{...}
}


类的继承

class FB:public FA

{…}

类的对象/实例化:

FA s;
s.a= ;
s.b= ;
s.fun1();


父类可以作为指针指向子类,但是子类不能作为指针指向父类,这是因为子类含有父类没有的东西。

FB S;//子类FB实例化对象
FA *p=&S;//父类指针p指向子类对象S
p->a=1;//访问子类成员变量


这里说父类派生出了子类,或者子类继承了父类。

2.函数/变量的多态/重载

所谓多态或者重载无非就是同一个变量名或函数出现多次定义,即虽然是一个接口,但是可以选择多种形态。

对于多态,通常是对于类的虚函数而言,即子类对于父类的虚函数可以进行重新定义。多态分为早绑定和晚绑定。在编译时候确定了函数的地址,这个属于早绑定,是静态的;而编译时候不能确定从而绑定函数的地址,则属于晚绑定。输出一般是子类的效果!

重载对于函数和变量而言,只是名字相同,而变量/函数的类型,成员变量等都要变化。

如:

int x;
float x;//虽然变量名相同,但是类型不同。
int fun1();
long fun1();//虽然函数名相同,但是类型不同。
int fun1(intx, int y, bool isMax);
int fun1(intx, int y);//虽然函数名相同,但是参数不同,也为重载。


3.虚函数与纯虚函数

对于类而言,其虚函数可以被重新定义,并且子类重定义时候必须跟父类在类型和数量上一致。定义为:

virtual void fun1()
{}


纯虚函数就是只有声明,没有定义,上面就是一个纯虚函数

4.构造函数和析构函数

首先对于每个类必须有构造函数和析构函数,即使你不定义,那么系统也会有一个默认的。当你调用类的时候就会自动调用构造函数,当程序结束的时候,又会自动调用析构函数。一般对于申请堆的情况,自定义一个析构函数,用于释放内存,防止内存泄漏。

案例:

class student
{
public:
int score;
string name;
void behavior();

public:
student()
{cout<<helloworl!<<endl;}//构造函数
~student()
{}//析构函数
};

student::behavior()
{}

void main()
{
student xiaoming;
xiaoming.behavior();
xiaoming.score=10;
}


5.数据封装

数据封装应用了类的特性,将数据放到类的私有成员里面,从而该数据变量或者函数只能被类内访问,不能被类外访问,从而保护了变量的安全性。案例如下:

#include "stdio.h"
#include"iostream"
using namespace std;

class student
{
public:
int score;
float age;
void fun() {
cout << "fun1" << endl;
}
void pub1();
void large()
{
//ss虽然是私有变量,但是可以在类里面被调用,但是外部是无法访问的,因此形成了数据的封装。
int ss = 100;
cout << "ss is:" << ss << endl;
}
private:
int ss;
void fun2()
{
cout << "hello private" << endl;
}
void pre();
};

void student::pub1()
{
cout << "hello public" << endl;
}

void student::pre()
{
cout << "hello!" << endl;
}

//公有继承student类
class std1 :public student
{
public:
int ss1;
private:
void get()
{
cout << "get!" << endl;
}
};

int main()
{

student xiaoming;
xiaoming.fun();
// xiaoming.fun2();//私有成员,不可访问!
xiaoming.score = 3;

xiaoming.large();

std1 xiaohua;
xiaohua.age = 12;//类std1继承了student父类所有特性,除了私有成员
//   xiaohua.ss = 22;//也是无法访问私有成员,从而形成了数据封装
xiaohua.large();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息