1:
友元函数:当一个全局函数作为一个类的友元函数时(class P{ friend void fun();…}),该全局函数可以访问该类的私有成员变量。
友元类:当一个类作为另一个类的友元类时,则友元类可以访问该类的私有成员(class P{friend calss Q;})
成员函数作为友元:当一个类中的一个成员函数作为另一个类的友元函数时,该友元成员函数可以访问该类的私有成员(class P{friend void Q::fun();})
2:
加号运算符重载:
a:全局函数实现+号运算符重载(Person operator+(const Person& p1,const Person& p2){…;return temp;} )
b:成员函数实现+号运算符重载(class Person{Person operator+(const Person& p1,const Person& p2){…;return temp;} })
3:继承权限:注意:
a:父类中所有非静态成员属性都会被子类继承下去,父类中的私有成员只是被编译器给隐蔽起来
b:创建子类对象时,先运行父类构造函数,再运行子类对象构造函数,子类对象析构,父类析构
c:子类对象可以直接访问自身与父类同名的成员变量、函数,如访问父类中的变量、函数需要加作用域(son.Bass::fun();)
d:多继承语法:class 子类:继承方式 父类1,继承方式 父亲2…(多继承可能会引发父类中有同名成员出现,需要加作用域区分)
e:在菱形继承(b,c继承a,d继承b,c)中,b与c继承a时加上virtual(虚继承),则创建d对象时,可以让b、c共享一个数据内存(a继承下来的)
4:多态
条件:a:有继承关系,b:子类重写父类的虚函数
动态多态的使用:父类的指针或引用执行子类对象
eg:void fun(Animal &animal){};;(Animal是类类型)
5:抽象类与纯虚函数
纯虚函数语法:virtual 返回值类型 函数名(参数列表)=0;
当类中有了纯虚函数,这个类也称为抽象类(抽象类:无法实例化对象,子类必须重写抽象类中的纯虚函数,否则也属于抽象类)
6:虚析构与纯虚析构:可以解决父类释放子类对象,都需实现函数的实现
语法:
虚析构:virtual ~类名(){}
纯虚析构:virtual ~类名()=0
类名::~类名(){}
来源:CSDN
作者:_小页_
链接:https://blog.csdn.net/qq_41631679/article/details/103741214