C++中继承的成员变量的覆盖/重写

您所在的位置:网站首页 子类继承父类的值 C++中继承的成员变量的覆盖/重写

C++中继承的成员变量的覆盖/重写

2023-12-09 15:10| 来源: 网络整理| 查看: 265

首先需要明白:

(1)    成员函数的覆盖:子类对父类的成员函数覆盖,必须函数名称一致,参数一致,返回值一致(当然编译器决定);

(2)    成员变量的覆盖:子类覆盖的仅仅是继承来的那个成员变量,而并不改变原来父类中的变量;

(3)    构造函数从基类开始构造,各个类的同名变量没有形成覆盖,都是单独的变量。子类调用就近原则,如果父类存在相关接口则优先调用,如果父类不存在则调用祖父类接口;当然,如果自己有则首先调用自己的函数;

我们先来看一段程序:

#include "stdafx.h" #include #include using namespace std; class A { public: int m; A() { m=1; printf("A.m=%d\n",this->m); } void print() { printf("%d\n",this->m); } }; class B:public A { public: int m; B() { m=2; printf("B.m=%d\n",this->m);} }; int _tmain(int argc, _TCHAR* argv[]) { B b; b.print(); printf("%d\n",b.m); return 0; } ///====================================输出 A.m=1 B.m=2 1 2

 

也就是说,程序在调用过程中,先构造的是基类,将A中的m置为1,然后构造子类,将B中的m置为2;接下来调用b.print();此时,A、B中m的值为1、2,b在B类中寻找print函数,发现不存在,继而去其直接父类中寻找,输出b.m,那么这个m到底是类A中的还是类B中成员函数呢?当然是类A中的成员变量,这是为什么呢?

           看看《C++ Primer》怎么说的?

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3