对于C++中说基类成员函数只能访问基类成员,而不能访问派生类的成员,有疑问?

在谭浩强老师关于继承和派生里面,有这样一段对派生类成员的访问属性论断!"基类成员函数只能访问基类成员,而不能访问派生类的成员",这句话不对吧?我想,如果派生类成员为pub... 在谭浩强老师关于继承和派生里面,有这样一段对派生类成员的访问属性论断!
"基类成员函数只能访问基类成员,而不能访问派生类的成员",这句话不对吧?我想,如果派生类成员为public属性,也不能被基类的成员函数访问么?
展开
 我来答
匿名用户

推荐于2017-09-30
展开全部
首先,派生类的新成员不在基类的作用域内,那么如果基类想要访问派生类的新添加成员就必须只能是派生类对象的成员(情况1)或者派生类的静态数据成员(情况2)。

其次,基类的定义必定是在派生类前面的,那么,基类要想使用派生类的新添加成员,必须对派生类作前置声明。而又因为仅有前置声明是不能定义实体对象的,所以情况1是不可能的。情况2基本同理。

情况1:
class B;//前置声明
B b;//这里会出错,因为编译器此时还不能获取到B的定义,根本无法创建B类的实体对象
class A
{
public:
void f()
{
cout << b.y;//试图访问派生类对象的成员
}

};

class B : public A
{
public:
static int x;
int y;
};

情况2:

class B;//前置声明
class A
{
public:
void f()
{
cout << B::x;//试图访问派生类的静态成员。这里会出错,因为编译器此时还不能获取到B::x的定义
}

};

class B : public A
{
public:
static int x;
int y;
};
追问
谢谢你!我一直认为,public 定义的数据成员和普通变量类似,因为只要在对象的作用域内,public成员变量都是可以引用的!其实书上说的没有将清楚,应该这样讲,基类的成员函数不能直接引用派生类的数据成员,因为基类的数据成员和派生类的数据成员this指针不一样。这是一点,另外一点,就像你说的,即使提前声明,但是C++规定要求有前置声明是不能定义实体对象的,只能引用对象的指针或者引用!
追答
然后?可以采纳我的答案么?谢谢了
zyl102600
2013-03-19 · TA获得超过678个赞
知道小有建树答主
回答量:702
采纳率:100%
帮助的人:710万
展开全部
当时空穿越时可行。
基类就比如是老祖宗,派生类就好比子孙。如果在远古时代的老祖宗开上了子孙的汽车,你说是不是穿越了呢?
更多追问追答
追问
但是派生类的数据成员为public呢?按照pulic的定义,也可以被类的作用域内的其他函数引用
追答
即使是子类的公有数据成员也不能直接作为基类的对象成员.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式