C++继承时子类父类同名成员变量的问题

本文解析了 C++ 中子类与父类同名成员变量的行为,阐述了如何通过作用域解决变量冲突,并说明了在调用基类成员函数时,如何正确引用基类与派生类中的成员变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码如下:

C/C++ code
#include<iostream.h> class Base { public: int a; Base() { a=0; cout<<"I`m base Begin"<<endl; } int Print() { cout<<a<<endl; return 1; } ~Base() { cout<<"I`m base End"<<endl; } }; class Simple: public Base { public: int a; Simple() { a=1; cout<<"I`m Simple Begin"<<endl; } ~Simple() { cout<<"I`m Simple End"<<endl; } /* print() { cout<<a<<endl; } */ }; main() { Simple b; b.Print(); cout<<b.a<<endl; }

输出结果是0,1。而不是1,1。为什么不同呢?

解释:

        因为在继承的时候,允许子类存在与父类同名的成员变量,但是并不覆盖父类的成员变量,他们同时存在。

        首先在base里面有一个 a 变量,然后在simple里面又有一个 a 变量。在孩子类创建对象时,会先调用父类的构造函数,先为父类的 a 变量初始化,然后调用孩子类的构造函数来初始化自己的变量,因为给孩子类中没有定义print函数,所以会按照就近原则去寻找父类中是否有print函数。恰好父类中有这个函数,于是调用父类的print函数b.print(),而这个函数会调用父类的a变量。

        b.a就就近调用孩子类的a变量。

      按照就近原则调用,如果自己的类中定义了接口就调用自己的,如果没有就去父类、祖父类....... 去找,然后调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值