【发布时间】:2022-08-17 12:26:46
【问题描述】:
嗨,我知道标题有点难以理解,那只是因为我不知道如何表达这个问题。幸运的是,我可以为我的问题提供一个易于理解的示例。想象一个基本的class A 派生的class B 和不相关的class C 设置如下:
class A
{
public:
};
class B : public A
{
public:
C c;
};
class C
{
public:
void foo();
};
我想知道如何在不这样做的情况下使用class B 的对象调用foo():
B b;
b.c.foo();
而是这个:
B b;
b.foo();
此外,我不想从class C 继承或复制class C\'s 函数。这可以通过简单的实现吗?谢谢!
-
您的示例无法编译。 prog.cpp:4:2: error: 类定义后预期的';' } ^ ; prog.cpp:9:5: 错误:‘C’没有命名类型 C c; ^ prog.cpp:10:2: error: 类定义后预期的';' } ^ ; prog.cpp:16:2: error: 类定义后预期的';' } ^ ;
-
简短的回答是,没有简单的方法可以做到这一点。关于“和不相关的 C 类”,那是不正确的。 C 参加一个作品与 B 的关系。此外,A 类是完全地与您易于理解的示例中的宗教裁判所无关,因此尚不清楚为什么它甚至存在。您的示例可能完全忽略了它。
-
@ 273K 哦,我的错,我忘记了类右括号后的分号。这是一个示例,而不是实际代码。
-
没有帮助。 prog.cpp:9:5: 错误:‘C’没有命名类型 C c;
-
如果没有继承,最好的办法是将
void B::foo()实现为{ this->c.foo(); },这并不完全是类C\ 的函数的副本。
标签: c++ oop inheritance alias type-erasure