虚方法必须总是在派生类中实现吗?
我能写这样的东西吗?
<!-- 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?
发布于 2013-03-05 20:02:51
纯虚方法总是必须在派生类中重新实现吗?
实际上是一个要实例化的派生类。
在您的代码中,您没有从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();
}发布于 2013-03-05 20:06:28
它使Derived成为一个不能实例化的抽象类,因为您没有从它的基础实现所有的virtual函数,所以它变成了一个不能直接实例化的抽象类。
查看此处: liveworkspace.org/code/6huYU$10
对于其余部分,您的代码应该可以工作。
发布于 2013-03-05 20:09:40
代码是正确的。在C++中,接口没有特殊的概念。所有这些都是类。一些类方法可以是纯虚的。这只意味着编译器不能创建此类类的实例。
https://stackoverflow.com/questions/15223192
复制相似问题