抽象类旨在派生自.Liskov替换原则粗略地指出,使用从抽象基类派生的类型的抽象部分的任何东西都应该同样好地使用基本多态.这意味着应该使用引用或指向基数的指针.
class Abstract
{
public:
virtual void foo() = 0;
};
class Implementation : public Abstract
{
public:
void foo() { std::cout << "Foo!" << std::endl; }
};
void call_foo(Abstract& obj) { obj.foo(); }
int main()
{
Abstract *bar = new Implementation();
call_foo(*bar);
delete bar;
}
Run Code Online (Sandbox Code Playgroud)
bar是一个pointer抽象类.它可以通过解除引用*操作,并通过为reference进call_foo,因为这是call_foo被要求的(Abstract*会要求一个指针,而Abstract&被要求参考).
在上面,传递了对抽象类的引用,并且当foo()使用.符号(而不是指针->符号)调用时,它会打印Foo!,因为这就是它的Implementation作用.
希望这可以帮助.