我对如何覆盖函数感到困惑 如果我有
class C
{
public:
C ();
};
class A: public C
{
public:
virtual string write()=0;
};
我又做了另一节课
class B: public A
{
public:
string B :: write() override {}
};
这对继承A类虚方法并重写它的B类无效吗?
好的,在main中,我不允许为这个抽象类调用构造函数是否正确?但是,如果该抽象类具有继承的构造函数,我该如何调用它们?
void main()
{
B();
}
答案 0 :(得分:0)
从另一个类继承的语法应该是这样的:
class B: public A{
public:
virtual string write(){
//do something
return someString;
}
};
答案 1 :(得分:0)
如果你想在这里指定override
(在 C ++ 11 中可用),你可以这样做。
标头文件
class B : public A {
public:
virtual string Write() override;
}
CPP文件
string B::Write() {
// Your implementation here.
}
事实上,如果这是您的实际意图,指定override
是一个好习惯。它避免了错误,例如尝试用string A::Write()
覆盖string B::Write() const
,但得到定义第二个函数的结果。在这种情况下,如果指定string B::Write() const override
,则会出现编译错误。
答案 2 :(得分:0)
这对继承A类虚方法并重写它的B类无效吗?
您需要删除冗余(和非法)B::
并返回一些内容。否则没关系。
我不允许为这个抽象类调用构造函数是否正确?但是,如果该抽象类具有继承的构造函数,我该如何调用它们?
根本不能直接调用构造函数;这不是语言的运作方式。在创建对象时间接调用构造函数:
B b; // Create an instance of B, indirectly calling B::B(), which calls A::A()
由于A
是抽象的,因此无法创建该类型的对象;只有像B
这样的派生类型才会覆盖所有纯虚函数。