gpt4 book ai didi

C++ 重载 `-`

转载 作者:行者123 更新时间:2023-11-27 23:35:18 28 4
gpt4 key购买 nike

我已经为我的类图将运算符重载为“-”。它的用途并不完全直观(糟糕的编码 - 我知道)但是如果我做 graph3 = graph2-graph1 那么图 3 是应该只接收图 2 和图 1 中的那些顶点。

所以,我已经编写了代码,当我运行调试器时,运算符函数似乎创建了一个要返回的新“图”,并将适当的顶点添加到新图然后调试器似乎退出了操作函数,但再也没有回到主要的。就好像在等着我输入什么似的。没有错误消息出现。

代码如下:

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;

运算符函数:

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());
}

最佳答案

与您的问题没有具体关系(尽管可能是),您为什么不使用 std::string?如果你必须使用字符数组,为什么不呢:

char stringy[100] = "|12,34,25,2,3,2|(3->2),(2->1),(5->9),(2->1)|";
Graph graph1( stringy );

甚至:

Graph graph1( "|12,34,25,2,3,2|(3->2),(2->1),(5->9),(2->1)|" );

或者您是否将传递给类的构造函数的指针存储起来?如果是这样,那是个坏主意,我对使用 std::strings 的建议会加倍。

关于C++ 重载 `-`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/836035/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com