📅  最后修改于: 2023-12-03 14:59:48.158000             🧑  作者: Mango
在C++中,继承是一种非常强大的特性,可以让子类从父类中继承属性和方法。然而,在使用继承时,我们需要注意一些细节和问题,本文将介绍 C++ 继承问题 4。
在C++中,当父类和子类都有同名的成员时,如何访问这些成员?
在 C++ 中,当父类和子类都有同名的成员时,我们需要使用 作用域解析运算符 来指定要访问哪个成员。
作用域解析运算符有两种形式:
::
):表示全局作用域或命名空间作用域。::
):表示类作用域或命名空间中嵌套的类作用域。使用作用域解析运算符访问成员的一般语法如下:
ClassName::member_name
其中,ClassName
是要访问的成员所属的类名,member_name
是要访问的成员的名称。
考虑以下代码:
#include <iostream>
using namespace std;
class A {
public:
void foo() {
cout << "A::foo" << endl;
}
};
class B: public A {
public:
void foo() {
cout << "B::foo" << endl;
}
};
int main() {
B b;
b.foo(); // Output: B::foo
b.A::foo(); // Output: A::foo
return 0;
}
在上面的代码中,类 B
继承自类 A
,同时也声明了名称为 foo
的函数。由于子类的同名成员可以隐藏父类的同名成员,所以当我们使用 b.foo()
调用成员函数时,实际调用的是 B
类的成员函数 foo
。
但是,当我们需要访问父类的同名成员时,可以使用 b.A::foo()
访问父类的成员函数 foo
,返回值为 A::foo
。
当父类和子类都存在同名成员时,我们可以使用作用域解析运算符来访问特定的成员。通过这种方式,我们可以在保留子类特性的同时,访问父类的同名成员。