MST

星途 面试题库

面试题:C++ 中多重继承二义性问题分析

假设有类A、类B都有成员函数print(),类C同时继承自类A和类B。请写出相应的C++代码框架,并说明当类C的对象调用print()函数时会出现什么问题,如何解决这个二义性问题。
23.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
class A {
public:
    void print() {
        // 函数实现
    }
};

class B {
public:
    void print() {
        // 函数实现
    }
};

class C : public A, public B {
public:
    // 可在这里根据需求重写print函数
    // void print() {
    //     // 函数实现
    // }
};

当类C的对象调用print()函数时,会出现二义性问题,因为编译器无法确定应该调用类A的print()还是类B的print()

解决这个二义性问题有以下几种方法:

  1. 在类C中重写print()函数:在类C中定义自己的print()函数,在该函数中可以根据需求决定调用类A还是类B的print()函数,例如:
class C : public A, public B {
public:
    void print() {
        A::print(); // 调用类A的print函数
        // 或者
        // B::print(); // 调用类B的print函数
    }
};
  1. 显式指定调用基类的函数:在调用print()函数时,显式指定调用哪个基类的函数,例如:
C c;
c.A::print(); // 调用类A的print函数
c.B::print(); // 调用类B的print函数