如何从子类访问父类数据成员,当父母和孩子的日成员具有相同的名称时

Posted

技术标签:

【中文标题】如何从子类访问父类数据成员,当父母和孩子的日成员具有相同的名称时【英文标题】:How to access parent class's data member from child class, when both parent and child have the same name for the dat member 【发布时间】:2012-07-16 13:07:20 【问题描述】:

我的场景如下::

class Parent

public:
int x;


class Child:public Parent

int x; // Same name as Parent's "x".

void Func()

   this.x = Parent::x;  // HOW should I access Parents "x".  


这里如何从 Child 的成员函数访问 Parent 的“X”。

【问题讨论】:

x = Parent::x; 就足够了 此外,以这种方式隐藏数据会使代码的可读性和可维护性大大降低,并且会引入几乎无法追踪的细微错误!嘘! 正如@Chad 提到的,这将涉及许多问题。为了学习和理解这些概念,这样命名它们是非常好的——但在实际代码中,你永远不应该那样做。另外,this 是一个指针,指针必须与->(*pointer) 表示法一起使用。 【参考方案1】:

通过作用域解析操作符访问它会起作用:

x = Parent::x;

但是,我会质疑您想在什么情况下执行此操作。您的示例使用公共继承来模拟“is-a”关系。因此,如果您有满足此条件的对象,但具有具有不同值和/或不同含义的相同成员,那么这种“is-a”关系具有误导性。可能有一些边缘情况是合适的,但我会说它们绝对是规则的例外。每当您发现自己这样做时,请认真思考为什么

【讨论】:

【参考方案2】:

这只是 Luchian Grigore 和 Anubis 先生提供的解决方案的简要说明,因此如果您对“这是如何工作的”感到好奇,请进一步阅读。

C++ 提供了一个所谓的“作用域运算符”(::),它非常适合您的任务。

更多详情请见this page。您可以将此运算符与类名(Parent)结合起来访问父级的x 变量。

【讨论】:

【参考方案3】:

几乎明白了:

this->x = Parent::x;

this 是一个指针。

【讨论】:

以上是关于如何从子类访问父类数据成员,当父母和孩子的日成员具有相同的名称时的主要内容,如果未能解决你的问题,请参考以下文章

子类从父类继承过来的方法可以操作子类自己定义的成员变量吗

java子类中如何访问和修改父类成员

java父类怎么访问子类数据成员?

C++中子类从基类都继承啥?

请教C++高手: 关于类的继承,当子类以public方式继承基类之后,根据继承的规则,基类的所有数据成员和成

类继承和重写的区别