class B(子类):public(继承格式) A (父类)
在创建类B的对象的时候,会先构造父类对象,如果没有显性写,是使用默认构造函数,析构的时候是先析构子类,在析构父类
创建子类的时候,可以在初始化列表指定调用父类的哪个构造函数
子类继承父类的数据成员,父类的成员函数(代码的重用,体系(只要注意子类比父类多的成员/属性)),父类的私有的成员是无法继承的。如果父类公有成员函数有修改私有变量的值的函数,子类可以调用该函数来修改父类私有成员的值。
继承格式:
public:公有继承的时候 父类的所有数据成员属性在子类中不会发生变化
protected:保护继承的时候,父类的公有数据成员和保护数据成员在子类中属性都变为保护数据成员
privata:私有继承的时候,父类的公有数据成员和保护数据成员在子类中属性都变为私有数据成员
class Parent { public: int public_data; Parent() { cout<<"Parent()"<<endl; this->public_data = 0; this->protected_data = 0; this->privata_data =0; } Parent(int i,int j,int k) { cout<<"Parent(int i,int j,int k)"<<endl; this->public_data = i; this->protected_data =j; this->privata_data =k; } void parentShowdata() { cout<<this->public_data<<endl; cout<<this->protected_data<<endl; cout<<this->privata_data<<endl; } void setPrivatadata(int a) { this->privata_data = a; } ~Parent() { cout<<"~Parent()"<<endl; } protected: int protected_data; private: int privata_data; }; class Sub:public Parent { public: Sub() { cout<<"Sub()"<<endl; this->name = " "; } Sub(const string &name,int i=0,int j=0,int k=0):Parent(i,j,k) { cout<<"Sub(const string &name,int i=0,int j=0,int k=0):Parent(i,j,k)"<<endl; this->name = name; } void subShowdata() { cout<<this->name<<endl; this->parentShowdata(); } ~Sub() { cout<<"~Sub()"<<endl; } private: string name; }; int main(int argc, char *argv[]) { Sub a("clshisunwukong",12,23,34); a.subShowdata(); cout<<a.public_data<<endl; // cout<<a.protected_data<<endl; //子类无法访问父类的保护数据成员,私有也访问不了 a.setPrivatadata(55); a.subShowdata(); }