首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++中种继承,但包含同名变量的疑问

2013-06-26 
c++中类继承,但包含同名变量的疑问各位,请教一个C++的问题:设计一个类A:class A{public:A()private:int a

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的名称。

热点排行