C++抽象类参数错误解决方法

Cem*_*mre 13 c++ parameters abstract-class

下面的代码段会产生错误:

#include <iostream>

using namespace std;

class A
{

public:

  virtual void print() = 0;
};

void test(A x) // ERROR: Abstract class cannot be a parameter type
{
  cout << "Hello" << endl;
}
Run Code Online (Sandbox Code Playgroud)

是否存在解决此问题的解决方案/解决方法/更换/更好

virtual void print() = 0;  
Run Code Online (Sandbox Code Playgroud)

virtual void print() = { }
Run Code Online (Sandbox Code Playgroud)

编辑:我希望能够通过使用多态(即A* x = new B() ; test(x);)传递任何扩展/实现基类A作为参数的类

干杯

das*_*ght 25

由于无法实例化抽象类,因此按值传递几乎肯定是一个错误; 你需要通过指针或引用传递它:

void test(A& x) ...
Run Code Online (Sandbox Code Playgroud)

要么

void test(A* x) ...
Run Code Online (Sandbox Code Playgroud)

按值传递将导致对象切片,几乎可以保证产生意外(以坏的方式)后果,因此编译器将其标记为错误.

  • 我会说这肯定是有保证的。 (2认同)