オブジェクトのすべてのデータを返すオーバーロードされた挿入演算子を作成しました。何らかの理由で私がそれを呼び出そうとしているとき。cout << *pkgArray[index] 何も表示されていませんが、* なしで実行すると、メモリ アドレスが返されます。以下は、オーバーロードされた演算子とそれを使用する私の試みです。
ostream& operator<<(ostream& o, const OverNight& bObj) {
stringstream ss;
ss << bObj.getAddress() << ", " << bObj.getCity() << ", " << bObj.getState() << ", " << bObj.getZip();
string fullAddress = ss.str();
ss.str("");
int newWeight = bObj.getWeight();
ss << "$" << bObj.getUnitPrice() + bObj.getAdditional() << "/ounce";
string costPerOunce = ss.str();
o << left
<< setw(1) << "|"
<< setw(20) << bObj.getsname()
<< setw(1) << "|"
<< setw(20) << bObj.getName()
<< setw(1) << "|"
<< setw(60) << fullAddress
<< setw(1) << "|"
<< setw(10) << bObj.getType()
<< setw(1) << "|"
<< setw(10) << costPerOunce
<< setw(1) << "|"
<< endl;
o << left << "+" << setfill('-') << setw(136) << right << "+" << endl;
o << setfill(' '); // clears the hyphen filler.
return o;
}
int main() {
Package *pkgArray[15]; // package class is abstract.
OverNight *onObj; // assigned to pkgArray later on.
TwoDay *tdObj; // assigned to pkgArray later on.
// pkgArray is a pointerArray filled with objects of 2 derived classes.
for (int index = 0; index < max; index++) {
cout << pkgArray[index];
}
}
*pkgArray[index] と &pkgArray[index] を試しましたが、後者はメモリ アドレスを返し、最初のものは何も返しません。私はC ++にかなり慣れていないので、この問題を解決するためにあらゆることを試したような気がします.
編集: pkgArray の宣言とそれに割り当てられるオブジェクトを追加しました。割り当てに従ってベクトルを使用できません。
問題をさらに調べた後、何が起こっているのかを発見しました。オーバーロードされた演算子が、渡されたオブジェクトを認識していないことです。私は pkgArray の逆参照を試み、基本クラスでオーバーロードされた挿入演算子の機能を完成させました。今私の問題は、動的配列から派生クラスのオブジェクトを取得する必要があることです。逆参照中に優先順位を適用しようとしましたが、役に立ちませんでした。ここでも、宣言は次のとおりです。
一晩 * onObj; // 派生クラスのオブジェクトに割り当てられるポインタ。TwoDay * tdObj; // 派生クラス Package のオブジェクトに割り当てられるポインタ * pkgArray[15]; // これは基本クラスである Package 型の動的配列です
OverNight オブジェクトと TwoDay オブジェクトが作成された後、それらは Package 配列に割り当てられます。
動的配列に格納されている派生オブジェクトを使用してオーバーライドされた << 演算子を呼び出すループを実行しようとしています。私はこの作業で苦労して多くのことを学びましたが、問題を解決するにはまだ十分ではないようです.