在VC中重载关系运算符"<"时为什么会出错?解决思路
在VC中重载关系运算符"<"时为什么会出错?
#include <iostream>
#include <string>
using namespace std;
class CBridge
{
public:
CBridge(string cs);
CBridge(const CBridge &obj);
public:
~CBridge(void);
public:
char *suit,*symbol;
int num;
public:
bool operator> (CBridge obj);
};
CBridge::CBridge(string cs)
{
suit=new char;
symbol=new char;
*suit=cs[0];
*symbol=cs[1];
num=(int)cs[1];
}
CBridge::CBridge(const CBridge &obj)
{
suit=new char;
*suit=*obj.suit;
symbol=new char;
*symbol=*obj.symbol;
}
bool CBridge::operator> (CBridge obj)
{
return (num> obj.num);
}
int main()
{
CBridge a( "S3 "),b( "HA ");
cout < <(a> b);
return 0;
}
发现函数CBridge::operator> ()中 num> obj.num 指代不明 obj时指代b呢还是a?
------解决方案--------------------
应该加上
析构函数
析构函数是不带参数的 有必要说明一个void参数吗
CBridge::~CBridge()
{
delete suit;
delete symbol;
}
#include <iostream>
#include <string>
using namespace std;
class CBridge
{
public:
CBridge(string cs);
CBridge(const CBridge &obj);
public:
~CBridge(void);
public:
char *suit,*symbol;
int num;
public:
bool operator> (CBridge obj);
};
CBridge::CBridge(string cs)
{
suit=new char;
symbol=new char;
*suit=cs[0];
*symbol=cs[1];
num=(int)cs[1];
}
CBridge::CBridge(const CBridge &obj)
{
suit=new char;
*suit=*obj.suit;
symbol=new char;
*symbol=*obj.symbol;
}
bool CBridge::operator> (CBridge obj)
{
return (num> obj.num);
}
int main()
{
CBridge a( "S3 "),b( "HA ");
cout < <(a> b);
return 0;
}
发现函数CBridge::operator> ()中 num> obj.num 指代不明 obj时指代b呢还是a?
------解决方案--------------------
应该加上
析构函数
析构函数是不带参数的 有必要说明一个void参数吗
CBridge::~CBridge()
{
delete suit;
delete symbol;
}