私はクラスグラフの演算子オーバーロードを" - "にしました。それは、直感的な完全 (悪いコーディング-Iは知っている)ではありませんが、私はgraph3 = graph2-グラフ1をすれば、グラフ3は だから、両方のグラフでのみ頂点2とグラフ1C++オーバーロード `-`
を受けることになっているI使用ですコードを書いたときに、私がデバッガを実行すると、オペレータ関数は新しい "グラフ"を作成して返すように見え、適切な頂点を新しいグラフ に追加してから、デバッガはオペレーションを終了するようです決してそれを mainに戻さないでください。それは私が何かを入力するのを待っているかのようです。 エラーメッセージは表示されません。
char stringy[100];
//cin>>stringy;
strcpy(stringy,"|12,34,25,2,3,2|(3->2),(2->1),(5->9),(2->1)|");
char* param= new char[sizeof(stringy)];
strcpy(param,stringy);
Graph graph1(param);
char sstring[20] = "|33,34,11|(2->33)|";
Graph graph2(sstring);
cout<<graph2.outSumm()<<endl;
Graph graph3;
//until here everything works fine
graph3= graph1-graph2; //the debugger does this and then
cout<<graph3.outSumm()<<endl;
operator-機能:
Graph Graph::operator- (const Graph& g2) const
{
Graph created;
//goes through "this" list and if value exists in g2 copies it to created
for(int i=0;i<vertList.getSize();i++)
{
if (g2.vertList.find(vertList.read(i))!=999)
created.addVertex(vertList.read(i).getInt());
}
return created;
}
私はコードブロックを使用しています。ここ
はコードです。
コピーコンストラクタ:
Graph(const Graph& g2):
maxVal(g2.maxVal),vertList(g2.vertList),edgeList(g2.edgeList){} ;
代入演算子:(それはあるかもしれないが)
void Graph::operator= (const Graph& g2)
{
if (this==&g2)
{
cout<<"not the greatest idea"<<endl;
return;
}
vertList.delete_List();
edgeList.delete_List();
maxVal=0;
addValues(g2.outSumm());
}
なぜこれらのchar配列を使用していますか?なぜstd :: stringを使わないのですか? –
代入演算子とコピーコンストラクタも共有できますか?コードは、それらのいずれかにぶら下がっている可能性があります。 – ephemient
"私はgraph3 = graph2-graph1を使うと、グラフ3はグラフ2とグラフ1の両方の頂点だけを受け取るはずです。 グラフ3はグラフ2とグラフ1の両方に頂点しか持たないので、&&(許可されています)をオーバーロードする方が理にかなっていませんか? –