C++面向对象-19-继承中同名成员的访问方式

在继承中,如果出现子类和父类有相同的成员变量或者成员函数,那么在子类创建对象后,是如何进行访问的呢,本篇来学习下这个知识点。

 

1.子类和父类有相同名称的成员变量

#include <iostream>

using namespace std;

class Base {

public:
    int m_A = 100;

};

class A : public Base {
public:
    int m_A = 200;
};

void test01() {
    A a;
    cout  << "m_A:"<< a.m_A << endl;
}

int main() {
    test01();
    system("pause");
}

这里我们就值得怀疑,这个m_A输出结果到底是100,还是200. 如果是200,说明是调用子类中成员变量m_A, 如果输出100,说明是父类。

运行结果:

从输出结果来看,当前打印走的调用时子类的成员变量m_A的值。那么我们要如何才能访问到父类的成员m_A,代码如下

#include <iostream>

using namespace std;

class Base {

public:
    int m_A = 100;

};

class A : public Base {
public:
    int m_A = 200;
};

void test01() {
    A a;
    cout  << "子类中m_A:"<< a.m_A << endl;
    cout << "父类中m_A:" << a.Base::m_A << endl;
}

int main() {
    test01();
    system("pause");
}

运行结果:

在出现重名的成员变量的时候,子类对象想要访问父类中同名的成员变量,需要使用父类的作用域,也就是上面代码中的Base::

 

2 同名的成员函数是如何访问的

看看下面这段代码,执行打印输出是什么

#include <iostream>

using namespace std;

class Base {

public:
    void myPrint() {
	cout << "这是调用Base中的打印函数:"  << endl;
    }

};

class A : public Base {
public:
    void myPrint() {
	 cout << "这是调用A中的打印函数:" << endl;
    }
};

void test01() {
    A a;
    a.myPrint();
}

int main() {
    test01();
    system("pause");
}

这里输出的是子类中的打印方法,同样如果要调用父类的myPint()应该这么做

#include <iostream>

using namespace std;

class Base {

public:
    void myPrint() {
	cout << "这是调用Base中的打印函数:"  << endl;
    }

};

class A : public Base {
public:
    void myPrint() {
	 cout << "这是调用A中的打印函数:" << endl;
    }
};

void test01() {
    A a;
    a.myPrint();
    a.Base::myPrint(); //调用父类中myPrint()
}

int main() {
    test01();
    system("pause");
}

 

结论:

1.子类对象可以直接访问到子类中同名成员
2.子类对象加作用域可以访问到父类同名成员
3.当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值