#include<iostream>//父类classstudent{public:int age;
std::string getName()//提供一个共有继承接口{return name;}protected:int ID;private:
std::string name;};//共有继承classxiaogua:publicstudent{public:voidprint(){
std::cout << age << std::endl;//父类中的共有属性
std::cout << ID << std::endl;//父类中的保护属性//std::cout << name << std::endl;//父类中的私有属性不可访问
std::cout <<getName()<< std::endl;//通过一个共有接口访问私有属性}protected:private:};//保护继承 在子类中的,父类中的公共属性会变成保护属性classxiaoguagua:protectedstudent{public:protected:private:};//私有继承,父类中的所有的属性都会在子类中变成私有属性,但是任然可以访问父类共有属性classxiaoguaguagua:privatestudent{public:voidprint(){
std::cout << age << std::endl;//父类中的共有属性
std::cout << ID << std::endl;//父类中的保护属性//std::cout << name << std::endl;//父类中的私有属性不可访问
std::cout <<getName()<< std::endl;//通过一个共有接口访问私有属性}protected:private:};intmain(){
xiaogua boy1;
boy1.age =21;
xiaoguagua boy2;//最低权限就是protected属性//boy2.age = 21; 不可访问因为变成了保护属性,这就是权限限定词只会加深父类中属性在子类中呈现return0;}
构造函数语法:必须要采用初始化参数列表方式调用父类的构造函数初始化父类属性
为了子类能够写无参构造函数.父类构造函数必须存在无参调用形态
一般情况子类的构造函数传参一般包括自身和父类中
在子类构造函数中最好都采用函数缺省的方法进行构造,可以带来很多方便性,以及不必要的问题
代码验证
#include<iostream>#include<string>//父类classstudent{public://子类存在无参的调用形态关键点在于父类构造函数存在无参调用形式,所以采用缺省方法就比较方便student(std::string name ="",int age =0):name(name),age(age){}protected:int age;
std::string name;};//共有继承classxiaogua:publicstudent{public:xiaogua(std::string name ="子类默认",int age =0,int num =0):student(name, age),num(num){}voidprint(){
std::cout << name <<"\t"<< age <<"\t"<< num << std::endl;}protected:int num;};classxiaoshagua:publicxiaogua{public://孙子类不需要去管祖父类,只需要调用父类构造函数即可xiaoshagua(std::string name ="孙子类默认",int age =0,int num =0,int xg =0):xiaogua(name, age, num),xg(xg){}voidprint(){
std::cout << name <<"\t"<< age <<"\t"<< num <<"\t"<< xg << std::endl;}protected:int xg;};intmain(){
xiaogua boy1("小瓜",20,100);
boy1.print();
xiaogua boy2;
boy2.print();
xiaoshagua boy3;
boy3.print();
xiaoshagua boy4("孙子瓜",21,100,200);
boy4.print();return0;}