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); } 解决歧义. 但是,在你的具体例子中,没有歧义,没有名字隐藏,所有这一切是完全不必要的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |