对抽象类的引用

lit*_*tuk 9 c++ reference abstract

当引用抽象类时它意味着什么?我在代码中发现它,我无法理解它.

我认为抽象类无法实例化.你怎么能给它一个参考?

Jer*_*ock 13

对抽象类的引用就像指向抽象类的指针:它需要引用抽象类的某些非抽象子类的对象.您可以使用类似的引用来使用.语法在引用的类上调用虚方法,其方式类似于Java中接口的指针.


Joh*_*ell 8

抽象类旨在派生自.Liskov替换原则粗略地指出,使用从抽象基类派生的类型的抽象部分的任何东西都应该同样好地使用基本多态.这意味着应该使用引用或指向基数的指针.

  • +1用于将其链接到Liskov替换原则.这些有价值的提示可以指导新手探索软件设计/编程的更深层领域,从而在相邻的小隔间中找到更有能力的同事:) (3认同)
  • @Als:+1 表示理解 Liskov 的长期优势。;-) (2认同)

Jam*_*mes 6

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抽象类.它可以通过解除引用*操作,并通过为referencecall_foo,因为这是call_foo被要求的(Abstract*会要求一个指针,而Abstract&被要求参考).

在上面,传递了对抽象类的引用,并且当foo()使用.符号(而不是指针->符号)调用时,它会打印Foo!,因为这就是它的Implementation作用.

希望这可以帮助.