c++中类继承,但包含同名变量的疑问
各位,请教一个C++的问题:
设计一个类A:
class A
{
public:
A();
private:
int a;
};
在析构函数A中,会设置a的值。
类B继承于A
class B:public A
{
public:
B();
private:
int a;
};
请教下:如果此时实例化类B,执行A的析构函数的时候,对变量a的修改是修改的类B中的a还是类A中的a呢?
[解决办法]
子类中的同名成员,就会覆盖掉父类的了。
此时,实例化B时,用的当然是B中的a。
另外,A中的a是私有的,在子类B中,也是无法用到的。
此时,如果你真要用到A中的a,
需要做两步,一个是把a改为公有或者保护
第二步你也必须使用 A::a来使用这个成员,否则用的还是B自己的a.
[解决办法]
#include "stdafx.h"
#include "windows.h"
#include "iostream"
#include <map>
//#include "csdn.h"
//#include "csdn.h"
using namespace std;
class A
{
public:
A(){m_data = 3;}
~A(){ m_data = 3;}
void fun();
public:
int m_data;
};
class B : public A
{
public:
B(){ m_data = 6;}
~B(){ m_data = 6;}
void fun();
private:
int m_data;
};
void main()
{
B b;
int *p = (int *)&b;
return;
}
//p的指针为0x0013FF5C ,看到该内存有两个值
//03 00 00 00 06 00 00 00
//所以有相同的变量不会覆盖。a析构会析构a的n值,可以自己调试。
//从汇编上看也是不一样的, eax的值都是一样。
//00411516 mov dword ptr [eax+4],6 ~B()
//00411566 mov dword ptr [eax],3 ~A()
//B继承了A,在B的内存结构中会也有一份n,编译器发现B已经有相同改的变量时,会重命名n的名称。