C++-不希望使用基方法
C++ - unwanted use of base method
我有一个基类A
和几个派生类B
、C
和D
,它们都有一个方法DoSomething()
,它在基类方法中是虚拟的(它在所有子类和基类中都实现)。
我有一个问题,派生类B使用基类a的方法。这可能是设计不好的结果,但我不认为有问题,因为实现非常直接。
在以下中创建的B类对象
A* a = new B();
如果我为这个对象调用方法DoSomething()
,则使用基类的方法:
a->DoSomething(); //Results in Base class method being called.
但是我希望使用类B的方法。你能告诉我怎么了吗?
根据您描述的症状:
- 或者您忘记了基类成员定义中的virtual关键字
- 或者您在派生类中的签名存在细微差异
前进的方法是在派生类中指示该函数是覆盖:
class A {
...
virtual void DoSometing();
};
class D : public A {
...
void DoSomething() override;
};
在这种情况下,如果不匹配,您将得到一条清晰的编译器错误消息。
下面的示例实现了您所要求的。
#include <iostream>
class A
{
public:
virtual void DoSomething()
{
std::cout << "A::DoSomething" << std::endl;
}
};
class B : public A
{
public:
virtual void DoSomething()
{
std::cout << "B::DoSomething" << std::endl;
}
};
int main(int argc, char **argv)
{
A *a = new B();
a->DoSomething();
delete(a);
return 0;
}
输出:
B::DoSomething
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- 我希望改进或要求我目前的延迟/睡眠方法。C++
- 告诉编译器我希望变量始终存储在寄存器中的正确方法是什么
- 是否有希望在std::变体上高效地调用一个公共基类方法
- 从 mfc 应用程序点击网络服务,并希望从网络服务登录方法读取用户代码返回
- C++-不希望使用基方法
- 是否不希望将指针存储在具有不同访问方法的多个容器中?