目录
- 一、程序及输出
- 1.1 同名成员变量
- 1.2 同名成员函数
- 二、分析与总结
一、程序及输出
1.1 同名成员变量
#include<iostream>
using namespace std;class Base
{
public:Base(){this->m_A = 10;}void func(){cout << "Base中的func调用" << endl;}void func(int a){cout << "Base中的func(int)调用" << endl;}int m_A;
};class Son :public Base
{
public:Son(){this->m_A = 20;}void func(){cout << "Son中的func调用" << endl;}int m_A;
};void test01()
{Son s1;cout << "s1.m_A = " << s1.m_A << endl;//我们可以利用作用域 访问父类中的同名成员cout << "Base中的m_A = " << s1.Base::m_A << endl;
}int main(){test01();system("pause");return EXIT_SUCCESS;
}
输出:
1.2 同名成员函数
#include<iostream>
using namespace std;class Base
{
public:Base(){this->m_A = 10;}void func(){cout << "Base中的func调用" << endl;}void func(int a){cout << "Base中的func(int)调用" << endl;}int m_A;
};class Son :public Base
{
public:Son(){this->m_A = 20;}void func(){cout << "Son中的func调用" << endl;}int m_A;
};void test02()
{Son s1;s1.func();s1.Base::func(10);//当子类重新定义了父类中的同名成员函数,子类的成员函数会 隐藏掉父类中所有重载版本的同名成员,可以利用作用域显示指定调用
}int main(){test02();system("pause");return EXIT_SUCCESS;
}
输出:
二、分析与总结
在 C++ 中,当一个派生类继承自一个基类,并且派生类中定义了与基类相同名称的成员变量或成员函数时,会出现同名成员的情况。在这种情况下,需要注意以下几点:
同名成员变量
:
如果派生类中定义了与基类相同名称的成员变量,派生类的同名成员变量会隐藏基类的同名成员变量。在派生类中访问同名成员变量时,会优先访问派生类中的成员变量。
如果需要访问基类中被隐藏的同名成员变量,可以使用作用域解析运算符::来指定访问基类中的成员变量。
同名成员函数
:
如果派生类中定义了与基类相同名称的成员函数,称为函数重写(override)。在派生类对象上调用同名成员函数时,会调用派生类中的成员函数而不是基类中的成员函数。
如果需要在派生类中调用基类的同名成员函数,可以使用作用域解析运算符::来指定调用基类中的成员函数。