【发布时间】:2020-07-17 06:47:08
【问题描述】:
我想显示结果是 2。(现在结果是 1。)
我该怎么办? (我想调用 B::test()。但实际上代码无法访问 main.c 中的 b.h、b.c)
我还想知道 a.h 中从“public: virtual int test() {return 1;}”到“protected: virtual int test() {return 1;}”的错误
继承关系是 超A类 亚B类 超类A 子类C
但我可以访问 main.c 中的 A 类 我想要结果 2。(“a.test()”无法调用“b.test()”)
// a.h
#ifndef _A_
#define _A_
class A {
public:
A() {};
~A() {};
//protected:
virtual int test() {return 1;}
private:
friend class B;
};
#endif
// b.h
#ifndef _B_
#define _B_
#include "a.h"
class B : public A {
public:
B() {};
~B() {};
private:
int test() override;
friend class A;
};
#endif
// b.c
#include "b.h"
int B::test()
{
return 2;
}
// c.h
#ifndef _C_
#define _C_
#include "a.h"
class C : public A {
public:
C() {};
~C() {};
private:
int test() override;
friend class A;
};
#endif
// c.c
#include "c.h"
int C::test()
{
return 3;
}
// main.c
#include <iostream>
#include "a.h"
using namespace std;
int main(void)
{
A *a = new A();
cout << a->test() << "\n";
return 0;
}
【问题讨论】:
-
我建议更改您的标题和标签。这不是多重继承。多重继承是类有两个 immediate 父级的地方:
class C : public A, public B ... -
代码无法访问 main.c 中的 b.h, b.c 为什么会这样?
-
我只贴了实际代码问题的总结。
标签: c++