C++中的拷贝构造函数
一、含义:C++拷贝构造函数又名赋值构造函数,表示方式一般为:
A(const A & c){}//A为类名,一般会加上const,所以原型为:类名(const类名&对象名)
以下为参考大神博客总结:https://www.cnblogs.com/alantu2018/p/8459250.html
二、需要调用的三种情形
1、当函数的参数为类的对象的时候
#include<iostream>
#include<stdio.h>
using namespace std;
class A
{
private:
int a;
public:
A(int b)
{
a = b;
printf("constructor is called\n");
}
A(const A & c)//拷贝构造函数
{
int d = 0;
a = c.a;
d = c.a;
printf("copy constructor is called\n");
cout << "a =" << a <<"\n";
cout << "d =" << d << "\n";
}
~A()
{
cout << "destructor is called\n";
}
};
void g_fun(A c)
{
cout << "g_func" << endl;
}
int main()
{
A a(100);
g_fun(a);//1、当函数的参数是类的对象
while (1);
return 0;
}
2、函数的返回值是类的对象
面对这种情况下的编译,我试着编译了,但是在vs和qt编译器下都没有实现,所以这个问题在网上找了找,发现有人说是因为有些编译器给做了优化,所以这个问题先放在这,后期如果遇到了,再来探究,先放两个链接,做了一些解释,但是具体我还没有去操作,参考:https://bbs.csdn.net/topics/390803716,https://blog.csdn.net/sxhelijian/article/details/50977946#commentBox
3、对象需要另外一个对象进行初始化
#include<iostream>
using namespace std;
class CExample
{
private:
int a;
public:
//构造函数
CExample(int b)
{
a = b;
printf("constructor is called\n");
}
//拷贝构造函数
CExample(const CExample & c)
{
a = c.a;
printf("copy constructor is called\n");
}
//析构函数
~CExample()
{
cout << "destructor is called\n";
}
void Show()
{
cout << a << endl;
}
};
int main()
{
CExample A(100);
CExample B = A;//对象需要通过另外一个对象进行初始化
B.Show();
while (true);
return 0;
}