来,复习一下运算符重载 [Easy Questions]
(1)劳驾各位看一下下面的code是否正确:
class myclass
{
public:
//无返回值:
//operator int();//myclass->int转换运算符
myclass();
myclass(int,int);
myclass(int);
~myclass();
myclass(myclass&);
bool operator==(const myclass&);
myclass& operator=(const myclass&);
myclass operator+(const myclass&);
myclass operator-(const myclass&);
myclass& operator++();
myclass myclass::operator++(int);
int readi()const {return m_num;}
int readp()const {return *p_num;}
private:
int m_num;
int *p_num;
};
myclass::myclass():
m_num(0)
{
std::cout<<"调用缺省构造函数。\n";
if(p_num=new int)
{
*p_num=0;
}
else
{
myclass::~myclass();
}
}
myclass::myclass(int new_num,int new_p_num):
m_num(new_num)
{
std::cout<<"调用构造函数(int,int)。\n";
if(p_num=new int)
{
*p_num=new_p_num;
}
else
{
myclass::~myclass();
}
}
myclass::myclass(int new_num):
m_num(new_num)
{
std::cout<<"调用构造函数(int)/int->myclass转换。\n";
if(p_num=new int)
{
*p_num=0;
}
else
{
myclass::~myclass();
}
}
myclass::~myclass()
{
std::cout<<"调用析构函数。\n";
m_num=0;
if(p_num)
{
delete p_num;
p_num=NULL;
}
}
myclass::myclass(myclass& rhs):
m_num(rhs.readi())
{
std::cout<<"调用复制构造函数。\n";
if(p_num=new int)
{
*p_num=rhs.readp();
}
else
{
myclass::~myclass();
}
}
bool myclass::operator ==(const myclass& rhs)
{
std::cout<<"调用运算符重载(operator==)运算(符)。\n";
if((m_num==rhs.readi())&&(*p_num==rhs.readp()))
{
return true;
}
else
{
return false;
}
}
myclass& myclass::operator=(const myclass& rhs)
{
std::cout<<"调用运算符重载(赋值)运算(符)。\n";
if(*this==rhs)
{
}
else
{
m_num=rhs.readi();
*p_num=rhs.readp();
}
return *this;
}
myclass myclass::operator +(const myclass& rhs)
{
std::cout<<"调用运算符重载(operator+)运算(符)。\n";
return myclass((m_num+rhs.readi()),((*p_num)+rhs.readp()));
}
myclass myclass::operator -(const myclass& rhs)
{
std::cout<<"调用运算符重载(operator-)运算(符)。\n";
return myclass((m_num-rhs.readi()),((*p_num)-rhs.readp()));
}
myclass& myclass::operator++()
{
std::cout<<"调用operator++(Perfix)(重载运算符)。\n";
++m_num;
return *this;
}
myclass myclass::operator++(int) //postfix
{
std::cout<<"调用operator++(Postfix)(重载运算符)。\n";
return myclass(m_num++); //需要这个构造函数
}
(2)为什么将myclass operator+(const myclass&)改为myclass& operator+(const myclass&),VC 7.1会报warning C4172: 返回局部变量或临时变量的地址?能否阐述一下机理?
(3)为什么在类中加入operator int(){std::cout<<"调用myclass->int转换运算(符)。\n"; return int(m_num);}后程序会发生崩溃??能否阐述一下机理?
分不够可以加!!