//继承 父类(基类)+ 新内容 = 子类(派生类)
//子类继承父类,子类继承父类所有的成员变量和成员函数 父类有的子类都有,子类没有的可以加
//继承方式 控制父类成员在子类中的访问权限:public、private、protected 格式 calss 子类:权限 父类
//规则(继承方式:public):
// 父类私有成员,子类不可访问(继承了,但不可访问)
// 父类受保护成员,继承后依然为受保护成员,可以类中访问
// 父类公有成员,继承后依然为公有成员,类中可以访问,类外也可以访问
//结构体继承方式默认公有,类继承方式默认私有
//父类友元函数不会被继承
//父类的构造函数和析构函数可以被继承,但是不可直接用于子类中
//子类继承父类除了构造和析构之外的所有成员函数和成员变量(不能用而已)
//隐藏:假如父类成员/数据不符合要求,需要重新写一个函数或者变量 在子类中写一个函数覆盖父类(重新父类函数,函数名和参数都一样,不会构成重载),调用时调用的为子类重写的函数,不再是父类函数
//子类的新成员变量、新成员函数:与父类无关系
//关于构造和析构,子类构造必须先调用父类的构造(使用参数列表)父类(x,y,z…)
// 子类的析构自动先调用 ,后调用父类的析构
//多继承:一个子类继承多个父类(会继承所有父类的所有成员) calss 子类:权限 父类1,权限 父类2…
// 关于构造:调用所有父类的构造(调用顺序和继承顺序有关,先父类再子类)
// 关于成员:父类中有同名成员变量,使用:类::变量名 区分
// (一般重名,需要隐藏掉)
//继承方式权限大小排名:public–>protected–>private
class A
{
protected://采用受保护权限,指明派生类可对成员变量进行访问,而类外不可访问
int data;
string name;
public:
A() :data(0), name(nullptr){}
A(int _data, string _name)
{
this->data = _data;
this->name = _name;
}
~A(){}
void show()const
{
cout << "ID:" << data << " Name:" << name << endl;
}
};
class B :public A
{
private:
int age;
public:
B() :age(0){}
B(int _age,int _data,string _name) :A(_data, _name)
{
this->age = _age;
}
void show()const
{
cout << "ID:" << data << " Name:" << name << " Age:" << age << endl;
}
};
int main()
{
A a(1, "何");
a.show();
B b(20, 2, "傻子");
b.show();
cin.get();
return 0;
}