子类出现和父类同名的成员,子类如何访问父类的同名成员?

一. 子类访问子类同名的成员,直接访问即可。

#include <iostream>
using namespace std;

class Base {
public:
    Base(int age = 0) : m_age(age) {}
    int get_age() {return m_age;}
    static int get_counter() {return ms_counter;}
    int m_age;
    static int ms_counter; // 静态成员,类内声明,内外初始化
};
int Base::ms_counter = 55; // 内外初始化

class Derived : public Base {
public:
    Derived(int age = 0, int base_age = 0) : Base(base_age), m_age(age) {}
    int get_age() {return m_age;}
    static int get_counter() {return ms_counter;}
    int m_age;
    static int ms_counter;
};
int Derived::ms_counter = 50; // 内外初始化

int main(int argc, char *argv[]) {
    // 通过对象访问非静态和静态成员
    Derived child(10, 40);
    cout << "child age = " << child.m_age << endl;
    cout << "child age = " << child.get_age() << endl;
    cout << endl;

    cout << "child counter = " << child.ms_counter << endl;
    cout << "child counter = " << child.get_counter() << endl;
    // 通过类名访问静态成员
    cout << "Derived::counter = " << Derived::ms_counter << endl;
    cout << "Derived::counter = " << Derived::get_counter() << endl;
    return 0;
}

二. 子类访问父类同名的成员,需加父类作用域。

因为:

1.子类中出现和父类同名的成员变量,子类会屏蔽掉父类的同名成员变量。

2.子类中出现和父类同名的成员函数,子类会屏蔽掉父类中跟子类同名的所有函数(包括重载的所有版本)。

#include <iostream>
using namespace std;

class Base {
public:
    Base(int age = 0) : m_age(age) {}
    int get_age() {return m_age;}
    static int get_counter() {return ms_counter;}
    int m_age;
    static int ms_counter; // 静态成员,类内声明,内外初始化
};
int Base::ms_counter = 55; // 内外初始化

class Derived : public Base {
public:
    Derived(int age = 0, int base_age = 0) : Base(base_age), m_age(age) {}
    int get_age() {return m_age;}
    static int get_counter() {return ms_counter;}
    int m_age;
    static int ms_counter;
};
int Derived::ms_counter = 50; // 内外初始化

int main(int argc, char *argv[]) {
    // 通过对象访问非静态和静态成员
    Derived child(10, 40);
    cout << "base age = " << child.Base::m_age << endl;
    cout << "base age = " << child.Base::get_age() << endl;
    cout << endl;

    cout << "base counter = " << child.Base::ms_counter << endl;
    cout << "base counter = " << child.Base::get_counter() << endl;
    // 通过类名访问静态成员
    cout << "Base::counter = " << Derived::Base::ms_counter << endl;
    cout << "Base::counter = " << Derived::Base::get_counter() << endl;
    return 0;
}

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值