私はGoogle talk on polymorphism and clean codeを見ていました。私はC言語で話者のJavaコードを++コピーC++での多型の実装
class Node{
virtual double evaluate() = 0;
};
class ValueNode :Node{
double value;
double evaluate(){
return value;
}
};
class OpNode :Node{
Node left;
Node right;
virtual double evaluate() = 0;
};
class AdditionNode : OpNode{
double evaluate(){
return left.evaluate() + right.evaluate();
}
};
class MultiplyNode : OpNode{
double evaluate(){
return left.evaluate() * right.evaluate();
}
};
:それは
は、スピーカーは、1 + 2 * 3のような操作のためのクリーンなコードを作成する方法を説明しました。しかし、C++でNode left;
Node right;
は、leftとrightが抽象クラスであり、したがって許可されていないNodeのオブジェクトであることを意味します。
これをどのように修正しますか。
編集:私は@Remyルボーによって与えられた提案に基づいてコードを変更しました。私は出力が7になると予想しましたが、代わりに687194771が得られました。
class Node {
public:
virtual int evaluate() = 0;
};
class ValueNode : public Node {
public:
int value;
int evaluate() {
return value;
}
};
class OpNode : public Node {
public:
Node *left;
Node *right;
};
class AdditionNode : public OpNode {
public:
int evaluate() {
return left->evaluate() + right->evaluate();
}
};
class MultiplyNode : public OpNode {
public:
int evaluate() {
return left->evaluate() * right->evaluate();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
ValueNode value1;
value1.value = 1;
ValueNode value2;
value1.value = 2;
ValueNode value3;
value1.value = 3;
MultiplyNode multiply;
multiply.left = &value2;
multiply.right = &value3;
AdditionNode add;
add.left = &value1;
add.right = &multiply;
int result = add.evaluate();
cout << result;
return 0;
}
ここで私のエラー
クラスValueNodeクラスとクラスAdditionNodeは、evaluate()宣言の前にプレフィックスvirtualを使用します。 – seccpur
はおそらく 'Node *'(またはスマートポインタ)を使用します –