子类和父类有相同的变量的问题
刚开始学习c++,在学习到继承的时候,产生了这个疑惑。我看的书比较简单,没有介绍这方面的内容的。或者请推荐相关的书籍,多谢诶
对于成员函数,有所谓的继承、覆盖、隐藏。对于成员变量呢?例如:
class A
{
protected:
int m_data;
public:
int getData()const{return m_data;}
};
class B : public A
{
protected:
int m_data;
public:
int getData()const{return m_data;}
}
main()
{
B b;
b.getData();
b.A::getData();
}
问题:如果按照上面的定义 b.getData返回的是b.m_data; b.A::getData返回的是b.A::m_data
如果B中没有定义m_data,那么 b.getData返回的是b.A::m_data; b.A::getData返回的是b.A::m_data
如果B中没有定义getData,那么 b.getData返回的是b.A::m_data; b.A::getData返回的是b.A::m_data,b怎么调用自己的m_data啊。
如果A中的getData定义为virtual则 b.getData返回的是b.m_data; b.A::getData返回的是b.A::m_data
请问这个是怎么实现的啊?哪个函数调用那个变量是有什么规则么?
***********************************************************************
下面是一个更变态的
class A
{
protected:
int m_data;
public:
A(int data = 0){m_data = data;}
int getData()const{doGetData();}
virtual int doGetData(){return m_data;}
};
class B : public A
{
protected:
int m_data;
public:
B(int data =1){m_data = data;}
int doGetData()const{return m_data;}
};
class C:public B
{
protectd:
int m_data;
public:
C(int data = 2){m_data = data;}
};
main()
{
C c(10);
cout<<c.GetData()<<endl; /*1*/
cout<<c.A::GetData()<<endl;/*1*/
cout<<c.B::GetData()<<endl;/*1*/
cout<<c.C::GetData()<<endl;/*1*/
cout<<c.doGetData()<<endl;/*1*/
cout<<c.A::doGetData()<<endl;/*0*/
cout<<c.B::doGetData()<<endl;/*1*/
cout<<c.C::doGetData()<<endl;/*1*/
}
实在是头晕了,尤其是c.A::GetData()和c.A::doGetData()。请各位大侠帮忙看看。