为特定参数类型设置未知类型或过载运算符的初始值

时间:2013-04-05 21:12:38

标签: c++ operator-overloading

我还在学习C ++并摆弄运算符重载。

现在,我必须生成一个输出,而我不知道它在输入时究竟是什么类型的数据类型 - 它在makefile中指定,可以是double,{{ 1}}或struct

代码优先:

enum

由于初始化后未设置#include <iostream> #define TYPE Complex //#define TYPE Symbol //#define TYPE double using namespace std; struct Complex { double Re; double Im }; enum Symbol { a, b, c, d, e }; struct Vector { TYPE Data[4]; //more in struct, but it's irrelevant }; // operator * overloads for Complex and Symbol here // output stream operator for Vector, Symbol and Complex // are also overloaded TYPE operator * (Vector A, Vector B) { TYPE Output; int i; for (i=0; i<4; i++) { Output = A.Data[i] * B.Data[i]; } return Output; // the output is garbage, because TYPE Output is not // set (to 0) at the beginning } int main { TYPE x; // ... x = SomeVectorA * SomeVectorB; cout << x << endl; // ... return 0; } 值,因此重载将在输出处产生垃圾 - 当我设置它时会有所帮助,但是这很有问题。为每种类型设置初始值的方式不同。

因此对TYPE Output而言

Complex

Complex X; X.Re = 0; X.Im = 0;

Symbol

Symbol X; X = e; 一样。

我想出的解决方案是为特定类型重载double

operator

但编译器会抛出错误,因为我已经重载double operator * (Vector A, Vector B); // [1] Symbol operator * (Vector A, Vector B); // [2] Complex operator * (Vector A, Vector B); // [3] ,但[3]类型作为输入,而Complex之后我再也无法[1]由于数据类型不兼容。

我还考虑将2.05 * 1.1功能添加到Init()struct Complex。但它不适用于struct Vector

检查enum也不起作用,因为编译器仍然会抛出错误。

问题
是否可以为不同的输入参数设置各种过载程序,或至少做一些事情以避免在TYPE中返回奇怪的输出?

1 个答案:

答案 0 :(得分:1)

尝试调用默认构造函数,例如:

TYPE Output = TYPE();