c++中派生类如何访问基类成员变量?

2024-12-26 23:12:55
推荐回答(5个)
回答1:

C++中派生类对基类成员的访问形式主要有以下两种:
1、内部访问:由派生类中新增成员对基类继承来的成员的访问。
2、对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。

三种继承方式下,派生类对基类成员的访问规则。

1、私有继承的访问规则

2、公有继承的访问规则

3、保护继承的访问规则

回答2:

问题1:静态变量可以通过继承到子类里,但是你不可能通过子类对X进行第二次初始化,绝对报错
问题2:你可以在子类里去修改这个静态变量,但是在修改这个值之后,即使你去调基类的foo函数,x还是你在子类里已经修改了的值,因为子类和基类的x其实是同一个,他们是同一块内存。

问题3:在基类里没法访问派生类的X。你可以通过多态的特性,在子类父类里写一个虚函数来设置x的值,然后通过使用A的指针去调用B类里的方法。但是对静态变量而言没有什么意义,因为他们是同一个东西,在哪修改都一样。

回答3:

t=animal.a;

这句话不行。a是一个普通成员变量,只有对一个具体的对象,才会有.a这种用法。

回答4:

很简单,fish改成这样就可以了:
class fish:public animal
{
public:
fish(){}
int t;
void fw()
{
t=a;
}
};
因为fish是animal的子类,对于fish的任何一个对象,它也拥有animal的特征,所以a也是fish的。

回答5:

这里a是public的可以直接访问
void fw()
{
t=a;
}
当然为了表明它属于基类:
可以
void fw()
{
t=animal::a;
}
如果是protected的也是这样做。
如果你把它弄成private的了,可以在基类中定义public的一个相应的gette/setterr函数即可。
如果实在不想这么做,又想访问,可以用指针的方法无视权限任意涂改,当然你要知道你的目的
别弄错了,因为正常合法是不允许这么做的,但练习无所谓。