void swapint(int &a, int &b)
{
cout << a << '\n' << b << endl;
int temp;
temp = a;
a = b;
b = temp;
}
class Critter
{
public:
Critter(const string& name = "", int age = 0);
~Critter();
Critter(const Critter& c);
Critter& operator=(const Critter& c);
void Greet() const;
private:
string* m_pName;
int m_Age;
};
void testAssignmentOp()
{
Critter crit1("crit1", 7);
Critter crit2("crit2", 9);
crit1 = crit2; //这里会调用重载的复制运算符
crit1.Greet();
crit2.Greet();
cout << endl;
Critter crit3("crit", 11);
crit3 = crit3;
crit3.Greet();
}
Critter& Critter::operator=(const Critter& c)
{
if (this != &c)
{
cout << *(c.m_pName) << '\n';
delete m_pName;
m_pName = new string(*(c.m_pName));
m_Age = c.m_Age;
}
return *this;
}
上面两个代码块,第一个是通过引用传递来交换a和b的值,另一个是重载赋值运算符。
我的疑问是:第一个代码块的cout << a << '\n' << b << endl; 输出的就是实参的值。但是为什么第二个代码块的c.m_pName却需要间址运算符才能输出实参的值,只写c.m_pName只会输出对应的地址。
另外关于this指针的问题是:第二个代码块中,为什么编译器可以自动识别出m_pName, m_Age指代的就是this?我编译过是能通过的。当然this->m_pName 和,this->m_Age也是能通过
非常感谢回答。