不是one没赋给three,而是num three = one.equal()这句调用的是拷贝构造函数num(num&);
网上搜一下初始化与赋值的区别吧
而你拷贝构造函数num(num&)里并没有给内部成员初始化或者赋值。
顺便说一句,正确的拷贝构造函数是num(const num& ); const最好要有。
num(const num& pr):n(pr.n)
{
}
你equal()返回的是值,也就是把将*this作为参数进行构造,而第16行的构造函数并没有进行初始化,所以返回了错误的类。
顺便插一句,第16行的构造函数,在标准C++中构造函数不允许传址,应该传常量,虽然VS不会报错,但不能保证在所有平台上都不会报错。