前言
整理一波构造函数、拷贝构造、赋值运算符重载、析构函数的调用,笔试题目里经常有,本文后面会贴一些同类型文章链接,方便查阅。
一、MyClass temps = show(5);发生了什么
以下是测试代码:
#include <iostream>
#include <fstream>
using namespace std;
fstream fout("test.txt", ios::app);
class MyClass
{
public:
MyClass()
{
fout << "无参构造函数" << endl;
}
~MyClass()
{
fout << "析构函数" << endl;
}
MyClass(int i) :number(i)
{
fout << "单参构造函数" << endl;
}
MyClass(const MyClass& a) //拷贝构造函数
{
fout << "拷贝构造函数" << endl;
}
MyClass& operator= (const MyClass& a) //赋值构造函数
{
fout << "赋值运算符重载函数" << endl;
}
private:
int number;
};
MyClass show(MyClass value)
{
fout << "MyClass show(MyClass value)" << endl;
return value;
}
int main() {
{
MyClass temps = show(5);
}
system("pause");
return 0;
}
运行结果:
单步调试:
C++:构造函数、拷贝构造、赋值运算符重载、析构函数的调用
二、 MyClass temps; temps= show(5);发生了什么
#include <iostream>
#include <fstream>
using namespace std;
fstream fout("test.txt", ios::app);
class MyClass
{
public:
MyClass()
{
fout << "无参构造函数" << endl;
}
~MyClass()
{
fout << "析构函数" << endl;
}
MyClass(int i) :number(i)
{
fout << "单参构造函数" << endl;
}
MyClass(const MyClass& a) //拷贝构造函数
{
fout << "拷贝构造函数" << endl;
}
MyClass& operator= (const MyClass& a) //赋值构造函数
{
fout << "赋值运算符重载函数" << endl;
this->number = a.number;
return *this;
}
private:
int number;
};
MyClass show(MyClass value)
{
fout << "MyClass show(MyClass value)" << endl;
return value;
}
int main() {
{
MyClass temps;
temps= show(5);
}
system("pause");
return 0;
}
运行结果:
单步调试:
C++:构造函数、拷贝构造、赋值运算符重载、析构函数的调用2
总结
可参考的其他文章:
https://blog.csdn.net/qq_31759205/article/details/80544468
https://blog.csdn.net/u014391177/article/details/82228662?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param