加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C:访问父方法和变量

发布时间:2020-12-16 07:53:29 所属栏目:百科 来源:网络整理
导读:我应该以哪种方式访问??这个父方法和父变量? 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{ DoSo
我应该以哪种方式访问??这个父方法和父变量?
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);
}

解决歧义.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读