函数覆盖不起作用
The function overriding is not working
关于继承和函数覆盖的问题。
// base.h
class Base {
protected:
void a();
public:
void b();
}
// base.cc
void Base::a() {
// Empty.
return;
}
void Base::b() {
this->a();
}
// derived.h
class Derived : public Base {
protected:
void a();
}
// derived.cc
void Derived::a() {std::cout << "OK" << std::endl;}
所以在我的程序中,它是Derived* p = new Derived()
,但p->b()
不打印OK
?不好意思,我是新手。
必须声明一个函数virtual
才能使继承工作。
// base.h
class Base {
protected:
void a();
public:
virtual void b();
}
您需要在基类声明中标记b()
virtual
:
class Base {
protected:
void a();
public:
virtual void b();
};
注意类声明末尾的分号:这在c++中是必需的。注意,您不需要在派生类中编写virtual
,尽管有些人采用这种风格。
(与Java不同,多态在c++中不是自动的)。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- C++覆盖父结构中的数据不起作用
- 抽象类型的对象 - 覆盖不起作用吗?
- 覆盖虚拟函数不起作用,头文件和C ++文件
- C++VS2013:覆盖默认构造函数不起作用
- C++ 覆盖方法不起作用
- 为什么作用域解析对覆盖的变量不起作用?
- 覆盖返回typename T的方法不起作用
- 函数覆盖不起作用