【发布时间】:2015-03-08 23:29:00
【问题描述】:
对于一个大学项目,我们必须创建几个类,所有这些都取决于抽象类函数。
但是在尝试定义类Compose 时,它必须组合作为构造函数参数传递的两个不同函数,我遇到了几个问题,如下所示。
在这种情况下,如何准确地将抽象类用作数据类型而不会出现问题?
抽象类Function:
class Function{
protected:
double _a, _b, _c, _m;
public:
Function(double a, double b, double c, double m): _a(a), _b(b), _c(c), _m(m){}
virtual double evaluate(double x) =0;
void print(){ for(double i=0.0; i==1.0; i+=0.1) cout << "Wert: " << i << ", Ergebnis: " << evaluate(i) << endl;}
};
类Compose:
class Compose:public Function{
private:
Function *_f1, *_f2;
public:
Compose(Function & f1, Function & f2):Function(0,0,0,0), _f1(f1), _f2(f2){}
double evaluate(double x){}
};
错误信息:
21:54:02 **** Incremental Build of configuration Debug for project Aufgabe_10_1 ****
Info: Internal Builder is used for build
g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -o "src\\Aufgabe_10_1.o" "..\\src\\Aufgabe_10_1.cpp"
..\src\Aufgabe_10_1.cpp: In constructor 'Compose::Compose(Function&, Function&)':
..\src\Aufgabe_10_1.cpp:37:7: error: cannot convert 'Function' to 'Function*' in assignment
_f1 = f1;
^
..\src\Aufgabe_10_1.cpp:38:7: error: cannot convert 'Function' to 'Function*' in assignment
_f2 = f2;
^
..\src\Aufgabe_10_1.cpp: In member function 'virtual double Compose::evaluate(double)':
..\src\Aufgabe_10_1.cpp:40:28: warning: no return statement in function returning non-void [-Wreturn-type]
double evaluate(double x){}
^
21:54:03 Build Finished (took 423ms)
【问题讨论】:
-
您似乎不确定
Compose是否管理指向Function的指针或对Function的引用。她们不一样。你想要哪个? -
我想你的意思一定是
Compose(Function * f1, Function * f2):_f1(f1), _f2(f2){} -
它必须使用引用进行管理,因为函数类型应该是引用。我只在 Compose 中使用了指针,因为编译器不允许我使用任何其他指针,因为我无法创建函数本身的任何对象,因为它是一个抽象类
标签: c++ class methods types abstract