2011-03-22 125 views
0

我經常遇到以下情況我有一個數據結構,我想有訪問如下該類返回類型重載

class data { 
public: 
    double error; 
    double value; 

    ... 
} 

... 

data *outputs; 

... 

double lastValue = ...; 
double someValue = ...; 

for (int i = 0; i < n; ++i) { 
    outputs[i] = someValue; //should be equivalent to outputs[i].value = someValue 
    outputs[i].error = lastValue - someValue; 
} 

目前我只是用outputs[i].value =但是,爲了提高可讀性,實際上使用(類似於)上述示例更合理(至少從理論的角度來看,代碼不需要可維護性)。

我明白operator =會適用於上述情況,但簡單訪問怎麼樣,我仍然必須使用outputs [i] .value。對於這兩種概念設計的可讀性來說,最好的解決方案是什麼,並且也不會讓程序員頭疼。

回答

3

您可以添加一個賦值操作符重載data

class data { 
public: 
    double error, value; 

    void operator=(double d) { value = d; } 
}; 

不過,說實話,我認爲這將是相當混亂。這取決於你打算如何使用它,當然,但鑑於你的榜樣,我認爲這將是清潔添加一個構造器類:

class data { 
public: 
    double error, value; 
    data(double value_arg, double error_arg) 
     : value(value_arg), error(error_arg) { } 
}; 

用作:

outputs[i] = data(someValue, lastValue - someValue); 
+0

謝謝,我可能最終會使用構造器解決方案,它絕對看起來像是雙方最乾淨最清晰的。 – dcousens 2011-03-22 02:57:58