必须始终在派生类中实现虚方法吗?
我能写这样的东西吗?
<!-- language: lang-cpp -->
class BaseInterface
{
public:
virtual void fun_a() = 0;
virtual void fun_b() = 0;
virtual ~BaseInterface();
};
class Derived : public BaseInterface
{
void fun_a() { ... };
};
class FinalClass : public Derived
{
void fun_b() { ... };
}
int main()
{
FinalClass test_obj;
test_obj.fun_a(); // use Derived implementation or fail ???
test_obj.fun_b(); // use own implementation
BaseInterface* test_interface = new FinalClass();
test_interface->fun_a(); // fail or ok ???
test_interface->fun_b();
}
上面的代码是否正确?
是否存在另一个虚拟方法outflank
?
答案 0 :(得分:0)
纯虚方法总是必须在派生类中重新实现?
实际上是一个将要实例化的派生类。
在您的代码中,您没有从Derived
创建对象,所以没关系。
我可以写这样的东西吗?
是
我有一些小错误,我纠正了它们:
class BaseInterface
{
public:
virtual void fun_a() = 0;
virtual void fun_b() = 0;
virtual ~BaseInterface() {}; // You forget this
};
class Derived : public BaseInterface
{
public:
void fun_a() {} // This should be public as its base
};
class FinalClass : public Derived
{
public:
void fun_b() {} // This should be public as its base
};
int main()
{
FinalClass test_obj;
test_obj.fun_a();
test_obj.fun_b();
BaseInterface* test_interface = new FinalClass();
test_interface->fun_a();
test_interface->fun_b();
}
答案 1 :(得分:0)
它使Derived
也是一个你无法实例化的抽象类,看到你没有从它的基础实现所有virtual
函数,它就变成了一个你无法直接实例化的抽象类。
见这里:liveworkspace.org/code/6huYU$10
对于其他人,您的代码应该有效。
答案 2 :(得分:0)
代码是正确的。 C ++中的 interface 没有特殊的概念。所有都是课程。一些类方法可以是纯虚方法。它只意味着编译器无法创建此类的实例。