1.封装
指的是信息隐藏,隐藏对象的实现细节,不让外部直接访问,只留下操作接口
访问控制:
public:成员能直接在成员函数中访问,也能通过对象访问
private:成员只能在成员函数中访问
所以为了达到封装的目的,成员(变量)一般定义为private
为了允许修改或读取对象的私有成员,就要提供公共的存取器函数
例:
class Student
{
private:
char name[20];
public:
void introduce();
void setName(const char* name); //存取器函数
char* getName(); //存取器函数
Ⅰ使用继承的目的:
1. 提高代码的重用性,因为派生类会拥有基类的的所有特性,所以写派生类的时候没必要把基类相同功能的代码再写一遍。
2. 提高代码的可拓展性,派生类可以在基类的基础上添加新的代码,而且一个基类可以出现多个派生类。
Ⅱ访问控制符
private:只有在当前类成员函数能够访问
protected: 只有在当前类成员函数和子类成员函数中能够访问
poblic: 即能在当前类成员函数、子类成员函数中访问,也能通过当前类对象、子类对象访问
Ⅲ
①公有继承:public (子类不能访问父类的私有成员,受保护成员和公有成员的的属性不变)
class 派生类名:public 基类名
{
//成员的声明
}
调用构造函数时会调用父类的构造函数和子类的构造函数
在定义派生类的构造函数是需要知道父类的构造函数,如果不指定则会调用父类的无参构造函数。
派生类构造函数定义:
派生类 名::派生类名(参数列表)
:基类名(基类构造函数参数列表),派生类成员(参数), ...
{
}
②受保护继承 protected (子类不能访问私有成员,非私有成员都变为受保护成员)
③私有继承 private (子类不能访问私有成员,所有非私有成员会变为私有成员)
Ⅳ多重继承
一个派生类可以继承自多个基类
class 派生类名:public A,pubic B,...
{
}
Ⅴ虚拟继承
针对多重继承中可能出现的菱形继承而采取的一种解决方案,可以节省内存
按照多重继承来说,假设乙继承于甲,丙继承于甲,而丁继承于乙和丙,所以此时丁中会有两份甲中的内容,显然是重复的,所以将多余的一份去掉,这便是虚拟继承
Ⅵ虚函数
①虚函数是在类成员函数声明前加上virtual关键字的函数
当基类的成员函数无法满足子类要求的时候,我们可以将该成员函数声明为虚函数以供子类改写,声明格式如下:
class 基类名
{
virtual 返回类型 函数名 (参数列表);
};
②虚函数列表
当一个类中出现了虚函数时,编译器会为这个类的对象多分配4个字节的空间用于存放虚函数列表。
在虚函数列表中存放了所有虚函数的函数指针。
当对象调用虚函数时,会优先从虚函数列表中寻找匹配的函数指针进行调用。
3.多态
①在面向对象语言中,接口的多种不同实现方式即为多态。
指的是信息隐藏,隐藏对象的实现细节,不让外部直接访问,只留下操作接口
访问控制:
public:成员能直接在成员函数中访问,也能通过对象访问
private:成员只能在成员函数中访问
所以为了达到封装的目的,成员(变量)一般定义为private
为了允许修改或读取对象的私有成员,就要提供公共的存取器函数
例:
class Student
{
private:
char name[20];
public:
void introduce();
void setName(const char* name); //存取器函数
char* getName(); //存取器函数
}
Ⅰ使用继承的目的:
1. 提高代码的重用性,因为派生类会拥有基类的的所有特性,所以写派生类的时候没必要把基类相同功能的代码再写一遍。
2. 提高代码的可拓展性,派生类可以在基类的基础上添加新的代码,而且一个基类可以出现多个派生类。
Ⅱ访问控制符
private:只有在当前类成员函数能够访问
protected: 只有在当前类成员函数和子类成员函数中能够访问
poblic: 即能在当前类成员函数、子类成员函数中访问,也能通过当前类对象、子类对象访问
Ⅲ
①公有继承:public (子类不能访问父类的私有成员,受保护成员和公有成员的的属性不变)
class 派生类名:public 基类名
{
//成员的声明
}
调用构造函数时会调用父类的构造函数和子类的构造函数
在定义派生类的构造函数是需要知道父类的构造函数,如果不指定则会调用父类的无参构造函数。
派生类构造函数定义:
派生类 名::派生类名(参数列表)
:基类名(基类构造函数参数列表),派生类成员(参数), ...
{
}
②受保护继承 protected (子类不能访问私有成员,非私有成员都变为受保护成员)
③私有继承 private (子类不能访问私有成员,所有非私有成员会变为私有成员)
Ⅳ多重继承
一个派生类可以继承自多个基类
class 派生类名:public A,pubic B,...
{
}
Ⅴ虚拟继承
针对多重继承中可能出现的菱形继承而采取的一种解决方案,可以节省内存
按照多重继承来说,假设乙继承于甲,丙继承于甲,而丁继承于乙和丙,所以此时丁中会有两份甲中的内容,显然是重复的,所以将多余的一份去掉,这便是虚拟继承
Ⅵ虚函数
①虚函数是在类成员函数声明前加上virtual关键字的函数
当基类的成员函数无法满足子类要求的时候,我们可以将该成员函数声明为虚函数以供子类改写,声明格式如下:
class 基类名
{
virtual 返回类型 函数名 (参数列表);
};
②虚函数列表
当一个类中出现了虚函数时,编译器会为这个类的对象多分配4个字节的空间用于存放虚函数列表。
在虚函数列表中存放了所有虚函数的函数指针。
当对象调用虚函数时,会优先从虚函数列表中寻找匹配的函数指针进行调用。
③函数重写
派生类可以对基类的虚函数进行重新声明定义,这种行为称之为函数重写。
函数重写会将派生类对象继承自基类的虚函数列表部分进行重写。
因为子类继承基类的时候同时会将基类的虚函数列表继承下来,所以子类对虚函数进行重写的时候进行了虚函数列表的修改。
重写方法:
在子类中也定义一个名称与基类中你想重写的函数名相同的虚函数即可。
④纯虚函数
纯虚函数是只需要声明,不需要定义的虚函数。声明方法如下:
class 类名
{
virtual 返回类型 函数名(参数列表)= 0;
}
⑤抽象类
有纯虚函数的类被称为抽象类,主要用于实现多态。
抽象类无法通过构造函数直接生成对象,只能够被派生类继承。
当抽象类被继承时,该类的所有纯虚函数必须在子类中重写,否则子类也将成为一个抽象类。
3.多态
①在面向对象语言中,接口的多种不同实现方式即为多态。
②多态能允许将父对象设置成一个或多个它子对象的技术,赋值之后父对象就可以根据当前赋值给他的子对象的特性进行操作。
③可简单理解为:将基类对象的指针或引用绑定到派生类对象上,此时基类的指针或引用就可以拥有派生类的特性
通过函数重写实现多态
①派生类重写基类的虚函数
②基类的指针或引用绑定到派生类的对象上。
③通过基类的指针或引用调用所绑定派生类重写过的函数