(一)类与对象
- 类的定义
- 对象的定义
- 访问数据成员
class class_name
{
private/public/protected:
int a,b,c;
function{ }
};
class_name bb;
class_name *pp;
bb.function();
pp->function()
public: 能被类成员函数、子类函数、友元访问,也能被类的对象访问。
private: 只能被类成员函数及友元访问,不能被其他任何访问,本身的类对象也不行。
protected: 只能被类成员函数、子类函数及友元访问,不能被其他任何访问,本身的类对象也不行。
(二)继承
- 基类与派生类
- 访问控制与继承
- 继承类型
- 多继承
简述:一个类可以派生自多个类。访问修饰符是 public、protected 或 private 其中的一个。如果没有写访问修饰符,则默认为private。派生类可以访问基类中所有的非私有成员。
一个派生类继承了所有的基类方法,但下列情况除外:
- 基类的构造函数、析构函数和拷贝构造函数。
- 基类的重载运算符。
- 基类的友元函数。
定义形式入下:
class 派生类名称:访问修饰符 基类名称
{
};
1、公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
2、保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
3、私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。
一个子类可以有多个父类:
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,… { <派生类类体> };
(三) 多态
一、重写
1、非虚函数重写:子类重新定义父类中有相同名称和参数的非虚函数;
2、虚函数重写:子类重新定义父类中有相同返回值、名称和参数的虚函数;
二、多态的分类
1、静态多态:函数重载、泛型编程;
2、动态多态:虚函数。
静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合适的函数就调用,没有的话就会发出警告或者报错;
动态多态是在程序运行时根据基类的引用(指针)指向的对象来确定自己具体该调用哪一个类的虚函数。
三、纯虚函数
(1)只在基类中声明虚函数,并不需要在基类中定义函数体,语法格式:virtual void funtion1()=0;
(2)“=0”是告诉编译器当前是声明纯虚函数,因此并不需要定义函数体。
(3)纯虚函数被实现后成为虚函数;
(4)基类中的纯虚函数就是个接口,纯虚函数不能被调用,它的存在只是为了在派生类中重新实现该方法;
(5)c++ 规定虚析构函数必须包含声明与实现(在对象销毁前,基类中的析构函数最后一个被调用,若此时没有对应的函数实现,显然是不行的);
四、抽象类
(1)用于表示现实世界中的抽象概念;
(2)是一种只能定义类型,而不能创建对象的类;但是,可以有抽象类指针 或 接口类指针,当它指向子类对象时就会发生多态;
(3)抽象类只能用作父类被继承,子类必须实现纯虚函数的具体功能;
(4)c++语言中没有抽象类的概念,但是可以通过纯虚函数实现抽象类;
(5)一个c++类中存在纯虚函数就成为了抽象类;(判断条件)
(6)如果子类没有实现纯虚函数,则子类成为抽象类。
五、接口
(1)类中没有定义任何的成员变量;
(2)所有的成员函数都是公有的纯虚函数;(判断条件 1 + 2)
(3)接口是一种特殊的抽象类;
一个类全是纯虚函数就是接口;
一个类部分是纯虚函数就是抽象类;