【发布时间】:2013-01-23 23:40:13
【问题描述】:
我对 C++ 还很陌生,这是我遇到的问题:
我有两个班级,Client 和 Host。加载所有内容后,您可以选择按两个按钮,如果您按按钮 1 Client 已加载,如果您按按钮 2 Host 已加载。
现在Client 和Host 都是相当大的类,我不想将它们都放入内存中。所以我的想法是创建一个Base 类,然后Client 和Host 都应该扩展基类,然后我唯一要做的就是:
Base connection;
//If button 1 is pressed:
connection = Client();
//If button 2 is pressed:
connection = Host();
这听起来好得令人难以置信,当我尝试它时,我没有发现任何错误。现在问题来了,Base 有一个名为A 的函数,而Client 有一个名为B 的函数。所以函数B是类Client所独有的。
当我尝试调用函数 B 时,我收到此错误:'class Base' has no member named 'B'。如何让 C++ 知道我正在与 Client 或 Host 类而不是 Base 交谈?我也愿意采用全新的方法来解决这个问题。也许这只是我思考过程中的一个错误。
提前致谢!
【问题讨论】:
-
对象切片相关的问题最近好像很流行。
-
您的代码可能没有按照您的意愿行事。查找对象切片。
-
您分别实例化客户端或主机。但是,您将它们分配给 Base 变量,该变量将它们转换(实际上它复制)到新的 Base 实例,因此原始身份丢失,也称为作为对象切片。
-
我已经快速阅读了有关对象切片的内容,但有没有一种方法可以在两个类之间选择运行时而不将它们都放在内存中?
-
A和B这些不同的功能到底是什么?可能有更基本的行为需要抽象。
标签: c++ oop class inheritance casting