C++ 定义C++;接口
我在为某个类定义接口时遇到以下问题。这就是我最后一节课的样子:C++ 定义C++;接口,c++,inheritance,C++,Inheritance,我在为某个类定义接口时遇到以下问题。这就是我最后一节课的样子: class msg { }; class statusmsg : public msg { }; class valuemsg : public msg { }; 现在我需要statusmsg和valuemsg类的接口,但是这些接口还需要知道msg基类的函数。我试过这样的东西 接口: class i_msg { virtual void do_something() = 0; }; class i_statusmsg
class msg {
};
class statusmsg : public msg {
};
class valuemsg : public msg {
};
现在我需要statusmsg和valuemsg类的接口,但是这些接口还需要知道msg基类的函数。我试过这样的东西
接口:
class i_msg {
virtual void do_something() = 0;
};
class i_statusmsg : public virtual i_msg {
virtual void do_something_else() = 0;
};
最终类别定义:
class msg : public i_msg {
void do_something() {
std::cout << "foo" << std::endl;
}
};
class statusmsg : public i_statusmsg {
void do_something_else() {
std::cout << "bar" << std::endl;
}
};
class msg:public i\u msg{
空做某事{
std::cout您的statusmsg无效,因为它没有实现来自i\u msg
的纯虚拟方法do\u something()
要解决此问题,您可以将空方法声明放入statusmsg
中,如下所示:
class statusmsg : public i_statusmsg {
virtual void do_something_else();
virtual void do_something() {};
};
正如您所做的,最后的课程应该是:
class msg : public virtual i_msg {
void do_something() override {
std::cout << "foo" << std::endl;
}
};
class statusmsg : public /*virtual*/ i_statusmsg, public msg {
void do_something_else() override {
std::cout << "bar" << std::endl;
}
};
class msg:public virtual i\u msg{
void do_something()覆盖{
std::cout您希望some\u statusmsg->do\u something()
做什么?您还可以通过实现继承的do\u something()方法来实现它。必需。
class msg : public virtual i_msg {
void do_something() override {
std::cout << "foo" << std::endl;
}
};
class statusmsg : public /*virtual*/ i_statusmsg, public msg {
void do_something_else() override {
std::cout << "bar" << std::endl;
}
};