cpp继承同名成员处理方式

06-5 继承同名成员处理方式

思考:当子类和父类中出现了同名的成员,如何通过子类对象访问父类的同名成员,子类呢?

#include <iostream>
#include <string>
using namespace std;
class A
{
public:
    string m = "这是类 A 的成员属性。";
    void f()
    {
        cout << "这是类 A 的成员函数。" << endl;
    }
};
class B :public A
{
public:
    string m = "这是类 B 的成员属性。";
    void f()
    {
        cout << "这是类 B 的成员函数。" << endl;
    }
};
int main()
{
    class B b;
    cout << b.m << endl;
    cout << b.A::m << endl;
    b.f();
    b.A::f();
    return 0;
}

运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)

这是类 B 的成员属性。
这是类 A 的成员属性。
这是类 B 的成员函数。
这是类 A 的成员函数。

我们来分析一下:

在这里,我们创建了两个类,一个类是类A,另外一个是类B。其中,类B使用公共继承方式(public)继承自类 A

在类A和类B中,分别都有一个一个成员属性m和成员函数f

之后我们使用cout命令打印b.m,发现打印的是类B的成员属性。但如果在对象后加上作用域:b.A::m,就可以成功访问到类A(对于类B来说,是其的父类)的成员属性了。

之后我们再次创建两个类的同名成员函数,发现直接调用b.f();,只能调用到在类B中的f函数,但如果在对象后加上作用域再调用:b.A::f();,就可以成功访问到类A(对于类B来说,是其的父类)的成员函数了。

所以可以得出:如果子类中出现了和父类同名的成员,子类同名成员会默认隐藏掉父类的同名成员。如果需要访问父类的被隐藏的同名成员,需要加上作用域。

  • 总结:
    1. 子类对象可以直接访问子类同名成员
    2. 子类对象加上作用域可以访问到父类中的同名成员(包括同名成员属性和成员函数)。
文章「cpp继承同名成员处理方式」,由本站用户「Admin」发布。文章仅代表Admin观点,不代表本站立场。
页面网页地址「https://xiaozhiyuqwq.top/p/933」。
如您对文章及其附件提出版权主张,或进行引用转载等,请查看我们的【版权声明】
无评论:-)

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇