📜  C++ |继承|问题4(1)

📅  最后修改于: 2023-12-03 14:59:48.158000             🧑  作者: Mango

C++ 继承问题4

在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

总结

当父类和子类都存在同名成员时,我们可以使用作用域解析运算符来访问特定的成员。通过这种方式,我们可以在保留子类特性的同时,访问父类的同名成员。