作者:颓废胖胖2502908443 | 来源:互联网 | 2023-09-25 21:01
大家好,这里是小张,今天给大家带来的是C++类的继承终极篇,今天小张会把剩下的类的继承内容全部说完,希望能够帮助到大家,话不多说,我们现在就开始。
首先先来说说在继承中同名成员的处理方式:如果是访问子类同名成员,直接访问就好,如果要是访问父类的同名成员,需要加作用域(::),详情见以下代码:
//继承同名成员的处理方式
//访问子类同名成员,直接访问就好
//访问父类的同名成员,需要加作用域
#include
using namespace std;
class Base//父类
{
public:int m_A;Base(){m_A = 10;//运用构造函数对类中成员进行初始化}
};
class son :public Base//用子类继承父类(公共继承的方式)
{
public:int m_A = 100;//此时与父类中的公共成员同名};
void test1()//测试案例一,看看此时是输出父类的m_A还是子类的m_A
{son p;//父类类型的pcout <<"son的m_A&#61;" <}
int main()
{test1();return 0;
}
那么此时结果会是父类中的10&#xff0c;还是会是子类中的100呢&#xff0c;我们来运行下看下结果&#xff1a;
答案是子类中的100&#xff0c;为什么呢&#xff0c;是因为我们在调用m_A的时候如果不加入作用域&#xff0c;我们的编译器会默认为我们想访问的是子类中的m_A,如果我们此时访问的时候加上作用域(::)&#xff0c;编译器就会知道我们此时想访问的到底是哪一个类中的m_A。
下面我们来看一下将作用域&#xff08;::&#xff09;加上的代码&#xff1a;
#include
using namespace std;
class Base//父类
{
public:int m_A;Base(){m_A &#61; 10;//运用构造函数对类中成员进行初始化}
};
class son :public Base//用子类继承父类&#xff08;公共继承的方式&#xff09;
{
public:int m_A &#61; 100;//此时与父类中的公共成员同名};
void test1()//测试案例一&#xff0c;看看此时是输出父类的m_A还是子类的m_A
{son p;//父类类型的pcout <<"son的m_A&#61;" <}
int main()
{test1();return 0;
}
加上作用域后结果就变成了父类中的10&#xff0c;所以以后要是我们想要调用不同类中的 同名成员的时候我们只需加上该类的类名以及作用域&#xff08;::&#xff09;就可以进行访问。
同理&#xff0c;同名函数也是这样的调用规则&#xff0c;下面我们用代码进行演示&#xff1a;
#include
using namespace std;
class Base//父类
{
public:int m_A;Base(){m_A &#61; 10;//运用构造函数对类中成员进行初始化}void func(){cout <<"Base下func函数的调用" <};
class son :public Base//用子类继承父类&#xff08;公共继承的方式&#xff09;
{
public:int m_A &#61; 100;//此时与父类中的公共成员同名void func(){cout <<"son下func函数的调用" <};
void test2()//测试案例二&#xff0c;看看此时是输出父类的函数func()还是子类的函数func()
{son p;//父类类型的pp.Base::func();//调用父类中的函数func()}
int main()
{test1();return 0;
}
结果跟我们预期的一样&#xff0c;现在我们对这个同名成员以及同名函数有了一定的认识&#xff0c;现在我们来进行小结一下&#xff0c; 如果子类出现和父类同名的成员或者成员函数&#xff0c;子类的同名成员或者成员函数会隐藏掉父类中所有的成员函数&#xff0c;如果想访问到父类中被隐藏的成员函数&#xff0c;这时候就需要加作用域&#xff08;::&#xff09;。
到这里我们就把继承中同名的处理说完了&#xff0c;接下来我们来说说多继承的语法 &#xff1a;C&#43;&#43;允许一个类继承多个类&#xff08;一个儿子可以认多个爹&#xff09;语法&#xff1a;class 子类&#xff1a;继承方式 父类1,继承方式 父类2......
下面由代码实现&#xff1a;
#include
using namespace std;
class Base1//父类(第一个父亲)
{
public:int m_A;Base1(){m_A &#61; 100;}
};
class Base2//父类&#xff08;第二个父亲&#xff09;
{
public:int m_B;int m_A;Base2(){m_B &#61; 200;m_A &#61; 600;}
};
class son :public Base1, public Base2//子类&#xff0c;此时子类既继承Base1也继承Base2
{
public:int m_C;int m_D;son(){m_C &#61; 300;m_D &#61; 400;}
};
void test03()//测试案例三
{son p;cout<}
int main()
{test03();return 0;
}
结果如上 &#xff0c;到了这里就已经把c&#43;&#43;中类的继承的问题全部讲解完成了&#xff0c;非常希望我的这个博客可以为正在学习c&#43;&#43;的朋友们带来帮助。同时也希望大家能够多多支持支持小张&#xff0c;你们的支持是小张最大的动力&#xff0c;小张在这里感谢大家啦&#xff01;