C:访问父方法和变量

前端之家收集整理的这篇文章主要介绍了C:访问父方法和变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我应该以哪种方式访问​​这个父方法和父变量?
class Base
{
public:
    std::string mWords;
    Base() { mWords = "blahblahblah" }
};

class Foundation
{
public:
    Write( std::string text )
    {
        std::cout << text;
    }
};

class Child : public Base,public Foundation
{
    DoSomething()
    {
        this->Write( this->mWords );
        // or
        Foundation::Write( Base::mWords );
    }
};

谢谢.

编辑:如果有歧义怎么办?

解决方法

您的代码中使用的两种语法(此 – > …和限定名称)仅在存在歧义或某些其他名称查找问题(如名称隐藏,模板基类等)时才有必要.

当没有歧义或其他问题时,您不需要任何这些语法.所有你需要的是一个简单的不合格的名字,如写在你的例子.只是写,而不是写 – 而不是基础::写.同样适用于mWords.

即在你的具体例子中,一个简单的写(mWords)将工作正常.

为了说明上述,如果您的DoSomething方法具有mWords参数,如in

DoSomething(int mWords) {
  ...

那么这个本地的mWords参数将隐藏继承的类成员mWords,你也必须使用它们

DoSomething(int mWords) {
  Write(this->mWords);
}

要么

DoSomething(int mWords) {
  Write(Foundation::mWords);
}

表达你的意图,即突破隐藏.

如果你的孩子班也有自己的mWords成员,如同

class Child : public Base,public Foundation
{
  int mWords
  ...

那么这个名字就会隐藏继承的mWords.在这种情况下,这种mWords方法不会帮助您取消隐藏正确的名称,您必须使用限定名称解决问题

DoSomething(int mWords) {
  Write(Foundation::mWords);
}

如果你的两个基类都有一个mWords成员,如同

class Base {
public:
  std::string mWords;
  ...
};

class Foundation {
public:
  int mWords;
  ...

然后在Child :: DoSomething中,mWords名称将是不明确的,你必须这样做

DoSomething(int mWords) {
  Write(Foundation::mWords);
}

解决歧义.

但是,在你的具体例子中,没有歧义,没有名字隐藏,所有这一切是完全不必要的.

原文链接:https://www.f2er.com/c/115519.html

猜你在找的C&C++相关文章