C++之构造函数,拷贝构造,析构函数再剖析
来源:互联网 发布:小乖淘宝店鞋店 编辑:程序博客网 时间:2024/05/29 17:22
我们已经了解了构造函数,析构函数基本用法,创建一个对象,我们可以调用构造函数进行初始化,要是我们用已知的对象去创建另一个对象呢?
例如:
Tpoint d1(3,5);Tpoint d2(d1);//考虑考虑
由一个对象初始化另一个对象,系统会调用拷贝构造函数或者默认拷贝构造函数
拷贝构造函数
1:名字与类同名,并且不被指定返回类型
2:只有一个参数,并且为类对象的引用
3:格式
<类名> :: <拷贝构造函数名> (<类名>& <引用名>){ }拷贝构造函数名与类同名<类名> :: <拷贝构造函数名> (<类名> <引用名>)//无引用时传值会创建 //临时对象,临时对象会调 用拷贝构造函数形成无穷递归{ }拷贝构造函数名与类同名
从下面代码分析:
class Tpoint{public : Tpoint(int x, int y);//自定义的构造 Tpoint(const Tpoint& p);//拷贝构造类内声明 Tpoint() { cout << "默认构造" << endl; } /*void SetPoint(int x,int y);*/ int Xcoord() { return X; } int Ycoord() { return Y; } ~Tpoint()//析构函数 { cout << X <<" "<< Y << " 析构 " << endl; }private: int X; int Y;}; Tpoint:: Tpoint(int x, int y){ X = x; Y = y; cout << "自定义构造" << endl;}Tpoint::Tpoint(const Tpoint& p)//拷贝构造函数{ X = p.X; Y = p.Y; cout << "Copy_构造" << endl;}Tpoint fun(Tpoint w);Tpoint fun(Tpoint w)//对象作为函数形参 (实参初始化形参调用拷贝构造函数赋初值){ cout << "shican" << endl; int x; int y; x = w.Xcoord() + 10; y = w.Ycoord() + 20; Tpoint R(x, y);//调用自定义构造函数创建临时对象 return R;//调用拷贝构造函数创建临时对象来保存R数据,该对象是无名的,(匿名对象) //在执行完 Tpoint P = fun(d5)时,内容已经赋值给P,然后临时对象被释放,}int main(){ Tpoint d1(12,20), d2(0,0), d3(3,3); Tpoint d4(2, 3); Tpoint d5(d4); Tpoint P = fun(d5); d2 = d3; cout << d5.Xcoord() << " " << d5.Ycoord() << endl; cout << P.Xcoord() <<" "<< P.Ycoord() << endl; cout << d2.Xcoord() <<" "<< d2.Ycoord() << endl;}
从程序运行结果来看,
Tpoint d5(d4);//一个对象初始化另一个对象,系统会调用拷贝构造函数Tpoint P = fun(d5);Tpoint fun(Tpoint w)//对象作为函数形参 (实参d5初始化形参w调用拷贝构造函数赋初值){ cout << "shican" << endl; int x; int y; x = w.Xcoord() + 10; y = w.Ycoord() + 20; Tpoint R(x, y);//调用自定义构造函数 return R;//调用拷贝构造函数创建临时对象来保存R数据,该对象是无名的,(匿名对象) //在执行完 Tpoint P = fun(d5)时,内容已经赋值给P,然后临时对象被释放,}
临时对象所起的作用详情:
void fun( const Tpoint w)//调用类的拷贝构造函数进行值传递void fun( const Tpoint& w) //不会调用拷贝构造函数Tpoint fun( const Tpoint& w)//传参时不会调用{ ....... return d;//返回时会调用拷贝构造函数生成临时对象}Tpoint& fun( const Tpoint& w)//不会调用拷贝构造函数
0 0
- C++之构造函数,拷贝构造,析构函数再剖析
- 拷贝构造函数剖析
- 【C++】拷贝构造函数的剖析
- 【C++】拷贝构造函数
- C++:拷贝构造函数
- c++"拷贝构造函数
- C++: 拷贝构造函数
- 【C++】拷贝构造函数
- c++::拷贝构造函数
- 【C++】:拷贝构造函数
- 【C++】拷贝构造函数
- C++:拷贝构造函数
- const用法总结以及构造函数、析构函数、拷贝构造函数的深入剖析
- 构造函数,拷贝构造函数,赋值函数,析构函数
- 构造函数,拷贝构造函数,赋值函数,析构函数
- 构造函数、析构函数、拷贝构造函数,常函数
- 构造函数、析构函数、拷贝构造函数、赋值函数
- 关于c++默认的构造函数、析构函数、拷贝构造函数、move函数
- KafKa基本介绍
- MapReduce之计数类应用
- java内存泄漏的定位与分析
- ES6---全新的对象object
- Best Time to Buy and Sell Stock II
- C++之构造函数,拷贝构造,析构函数再剖析
- 递推计数问题题目总结
- 内存分配函数介绍
- MapReduce shuffle过程剖析及调优
- L1-037. A除以B
- leetcode上令人拍案叫绝的解法
- redis系列(七)redis集群
- 第五周报告
- leetcode 77