下面有几个问题想不明白,希望学长 or 学姐可以帮忙解决,谢谢☺
1.递增运算符重载
#include<iostream>
using namespace std;
class myInteger{
friend ostream& operator<<(ostream &cout, myInteger integer);
public:
myInteger()
{
myint = 0;
}
//重载前置++
myInteger& operator++()
{
myint ++;
return *this;
}
//重载后置++
myInteger operator++(int)
{
myInteger temp = *this;
myint ++;
return temp;
}
private:
int myint;
};
//重载左移运算符
ostream& operator<<(ostream &cout, myInteger integer)
{
cout << integer.myint;
return cout;
}
//重载前置++ 测试
void test01()
{
myInteger num1;
cout << ++num1 << endl;
cout << num1 << endl;
}
//重载后置++ 测试
void test02()
{
myInteger num2;
cout << num2++ << endl;
cout << num2 << endl;
}
int main()
{
test01();
test02();
return 0;
}
问题:在左移运算符<<重载的函数中,为什么形参一个传引用,一个不传引用?如果两个都传引用,就会出现重载后置++的测试案例中 43行代码(cout << num2 ++ << endl)报错:没有与这些操作数匹配的 "<<" 运算符 但是如果两个参数都用引用,测试前置++运算符就没有问题
ostream& operator<<(ostream &cout, myInteger integer) //只有这样写形参才能保证前置后置测试都对
//为什么呢???
2.下面的代码在Dev C++ 和Visual Studio 中运行结果不一样 ?(ಥ_ಥ) ?
问题:下面的代码有关于拷贝(复制)构造函数调用时机的三种情况,为什么最后一种情况在Dev C++和VS中运行的情况不一样???
#include<iostream>
using namespace std;
class Person {
public:
Person()
{
cout << "默认构造函数被调用" << endl;
}
Person(int n)
{
age = n;
cout << "有参构造函数被调用" << endl;
}
Person(const Person& p)
{
age = p.age;
cout << "拷贝构造函数被调用" << endl;
}
~Person()
{
cout << "析构函数被调用" << endl;
}
int age;
};
//1.使用一个创建完毕的对象来初始化一个新对象
void test01()
{
Person p(10);
Person p1(p);
cout << "p1的年龄为:" << p1.age << endl;
}
//2.以值传递的方式给函数参数传值
void test02(Person p)
{
}
//3.值方式返回局部对象
Person doWork()
{
Person p1;
cout << (int*)&p1 << endl;
return p1;
}
void test03()
{
Person p = doWork();
cout << (int*)&p << endl;
}
int main()
{
//test01();
//Person p2;
//test02(p2);
test03();
return 0;
}