Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;超载`-`_C++_Operator Overloading - Fatal编程技术网

C++ c++;超载`-`

C++ c++;超载`-`,c++,operator-overloading,C++,Operator Overloading,我已经为我的类图将运算符重载为“-”。它的用途并不完全相同 直观(糟糕的编码-我知道),但如果我做了graph3=graph2-graph1,那么图3是 应该只接收图2和图1中的顶点 因此,我已经编写了代码,当我运行调试器时,操作符函数似乎创建了一个新的“图”来返回,并将适当的顶点添加到新的图中 然后调试器似乎退出op函数,但从未使其返回到 梅因。就好像它在等我进入什么东西。 没有出现错误消息 代码如下: char stringy[100]; //cin>>stringy; strc

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

因此,我已经编写了代码,当我运行调试器时,操作符函数似乎创建了一个新的“图”来返回,并将适当的顶点添加到新的图中 然后调试器似乎退出op函数,但从未使其返回到 梅因。就好像它在等我进入什么东西。 没有出现错误消息

代码如下:

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;
分配操作员:

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());
}
void图::运算符=(常量图&g2)
{
如果(此==&g2)
{

cout与您的问题没有特别关系(尽管可能是),为什么不使用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。

与您的问题没有特别关系(尽管可能是这样),为什么不使用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。听起来您的代码处于无限循环中。当程序似乎停止时,您是否尝试过中断调试器


您是否在Graph类中定义了复制构造函数?为了使用本地
创建的
变量成功返回值,您需要该构造函数。

听起来您的代码处于无限循环中。当程序似乎停止时,您是否尝试断开调试器


您是否在Graph类中定义了复制构造函数?为了使用本地
创建的
变量成功返回值,您需要该构造函数。

而不是实现运算符-,而是实现运算符-=:

Graph& Graph::operator-=(const Graph& rhs)
{
    // remove nodes not in both Graphs

    return *this;
}
然后,只需实现运算符-就这一点而言:

Graph Graph::operator-(const Graph& rhs)
{
    Graph temp(*this);
    temp -= rhs;
    return temp;
}

查看此操作是否有效。

代替执行运算符-,执行运算符-=代替:

Graph& Graph::operator-=(const Graph& rhs)
{
    // remove nodes not in both Graphs

    return *this;
}
然后,只需实现运算符-就这一点而言:

Graph Graph::operator-(const Graph& rhs)
{
    Graph temp(*this);
    temp -= rhs;
    return temp;
}


看看这是否有效。

为什么要使用所有这些字符数组?为什么不使用std::string?您还可以共享赋值运算符和复制构造函数吗?代码可能挂在其中一个数组中。“它的使用并不完全直观(糟糕的编码-我知道)但是如果我做graph3=graph2-graph1,那么图3应该只接收图2和图1中的那些顶点。“重载&&(这是允许的),因为图3在图2和图1中都只有顶点,这不是更有意义吗?规范名称是std::union()-您可能想专门化它。嗯,运算符=()和图(Graph)中没有明显的内容,但它可能仍然挂在其中一个(多个)中在它们内部调用。我们真的无法提供这么少的信息。为什么要使用所有这些字符数组?为什么不使用std::string?您还可以共享赋值运算符和复制构造函数吗?代码可能挂在其中一个中。“它的使用不是完全直观的(糟糕的编码-我知道)但是如果我做graph3=graph2-graph1,那么图3应该只接收图2和图1中的那些顶点。“重载&&(这是允许的),因为图3在图2和图1中都只有顶点,这不是更有意义吗?规范名称是std::union()-你可能想专门化它。嗯,运算符=()和图形(Graph)中没有什么明显的东西,但它可能仍然挂在其中的一个(许多)调用中。我们真的无法提供这么少的信息。你打断调试器是什么意思?@Meir:我的意思是使用调试器暂时停止执行,而不退出程序。(这使您可以像到达断点一样检查堆栈、变量等。)中断调试器是什么意思?@Meir:我的意思是使用调试器暂时停止执行,而不退出程序。(这使您可以像到达断点一样检查堆栈、变量等。)是否有-=的用例,或者你添加它是因为书上说这是一个好主意。如果有用例,那么定义-=是一个好主意但是仅仅因为添加运算符是个坏主意。只实现您需要的!这种情况是将赋值从实际操作中分离出来。此外,如果您要重载运算符,最好正确地进行操作。就个人而言,我根本看不出运算符重载的原因,但此操作仍然是类似的,可能是不需要。我同意你是否要做得对。但这不是你的例子的论点。在你做之前,你应该分析用例,看看它是否是一个有效的用例。在这种情况下-=没有用例,因此它“可能”是浪费精力和未使用的代码。注意:只有在上下文中才是正确的如果用它来证明它是正确的,你必须首先证明它的存在。是否有-=的用例,或者你添加它是因为书上说它是一个好主意。如果有用例,那么定义-=是一个好主意但是仅仅因为添加运算符是个坏主意。只实现您需要的!这种情况是将赋值从实际操作中分离出来。此外,如果您要重载运算符,最好正确地进行操作。就个人而言,我根本看不出运算符重载的原因,但此操作仍然是类似的,可能是不需要。我同意你是否要做得对。但这不是你的例子的论点。在你做之前,你应该分析用例,看看它是否是一个有效的用例。在这种情况下-=没有用例,因此它“可能”是浪费精力和未使用的代码。注意:只有在上下文中才是正确的用哪一个