C++ C++;由其他类实现的纯虚拟方法
让我们看看来自外部库的类AC++ C++;由其他类实现的纯虚拟方法,c++,derived-class,pure-virtual,C++,Derived Class,Pure Virtual,让我们看看来自外部库的类A class A { public: void method() { cout << "hi"; } }; 我创建了由A和B派生的类D class D : public A, public B { }; 但是当我创建D的实例时,我得到以下错误: 错误:无法将变量“d”声明为抽象类型“d” 如何实现类D它不是一个抽象类,可以从类A调用method() 示例代码: B具有纯虚函数,从该类(B)
class A {
public:
void method() {
cout << "hi";
}
};
我创建了由A和B派生的类D
class D : public A, public B {
};
但是当我创建D的实例时,我得到以下错误:
错误:无法将变量“d”声明为抽象类型“d”
如何实现类D它不是一个抽象类,可以从类A调用method()
示例代码:
B具有纯虚函数,从该类(B)派生的任何类(D)都必须重写以创建该类的实例
所以D应该是
class D : public A, public B {
void method()
{
//implementation
}
//other code
};
B具有纯虚函数,从该类(B)派生的任何类(D)都必须重写以创建该类的实例
所以D应该是
class D : public A, public B {
void method()
{
//implementation
}
//other code
};
在
D
中定义函数,并使用A
提供的实现
class D : public A, public B {
public:
void method() {
A::method();
}
};
在
D
中定义函数,并使用A
提供的实现
class D : public A, public B {
public:
void method() {
A::method();
}
};
您必须覆盖
D
中的方法。你可以这样做
class D : public A, public B {
public:
void method() override {
A::method();
}
};
您必须覆盖D
中的方法。你可以这样做
class D : public A, public B {
public:
void method() override {
A::method();
}
};
从抽象基类派生的类也将是抽象的,除非您重写派生类中的每个纯虚函数。从抽象基类派生的类也将是抽象的,除非您重写派生类中的每个纯虚函数。@Warthel4578您在一个不同的方法中定义的是什么。如果要从D调用该方法,则应使用::method()@Warthel4578在不同的方法中定义。如果要从D调用该方法,应该使用A::method()override
仅为C++11。如果支持/允许,可以使用它,但也可以不使用它。这里是2014年…;-)选择它作为最佳答案,因为覆盖
覆盖
仅为C++11。如果支持/允许,可以使用它,但也可以不使用它。这里是2014年…;-)选择它作为最佳答案原因覆盖@Warthel4578:这绝对是正确的方法。使用C++11时,您可以添加覆盖
。由于下层选民没有留下评论,我想他们是来自普通的仇视stackoverflow的人…@Warthel4578:这绝对是正确的做法。使用C++11时,您可以添加覆盖
。由于下层选民没有留下评论,我猜他们是来自普通的仇恨者。。。