如何从子类访问父类数据成员,当父母和孩子的日成员具有相同的名称时
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
是一个指针。
【讨论】:
以上是关于如何从子类访问父类数据成员,当父母和孩子的日成员具有相同的名称时的主要内容,如果未能解决你的问题,请参考以下文章