构造函数:用于初始化对象的相关属性,如果程序员没有指定声明构造函数,则系统默认声明一个无内容,无参数的构造函数,如果程序员自己声明了一个带参数的构造函数,则系统不会再提供任何构造函数
拷贝构造函数:只有在三种情况下,才会调用拷贝构造函数,第一种情况:使用已有的对象为刚创建出来的对象初始化时调用,第二种情况:使用对象作为某个函数的实参传递时调用,第二种情况:当一个函数的返回值是一个类对象时,当函数返回时调用。如果程序员没有为类声明拷贝构造函数,则系统自己生成一个隐含的拷贝构造函数,这个拷贝构造函数的功能是:用作为初始值的对象的每个数据成员的值,初始化将要建立的对象的对应的数据成员。
以下是一个简单的例子:
Point.h文件
1 class Point
2 {
3 public:
4 Point(int x,int y);
5 Point(Point& p);
6 int getX();
7 int getY();
8 private:
9 int x,y;
10 };
Point.cpp文件
1 #include "Point.h"
2 #include <iostream>
3
4 Point::Point(int x =0,int y = 0){
5 this->x=x;
6 this->y=y;
7 }
8 Point::Point(Point& p){
9 x = p.x;
10 y = p.y;
11 std::cout << "calling this copy constractor;" << std::endl;
12 }
13 int Point::getX(){
14 return this->x;
15 }
16 int Point::getY(){
17 return this->y;
18 }
Main.cpp文件
1 #include <iostream>
2 #include "Point.h"
3
4 using namespace std;
5
6 void fun1(Point p){
7 cout << p.getX() << endl;
8 }
9
10 Point fun2(){
11 Point a(2,1);
12 return a;
13 }
14
15 int main(){
16 Point a(4,5); //第一个对象a;
17 Point b = a; //情况一:用a初始化b,第一次条用拷贝构造函数
18 cout << b.getX() << endl;
19 fun1(b); //情况二:对象b作为fun1方法的实参,第二次调用拷贝构造方法
20 b = fun2(); //情况三:函数的返回值是类对象,函数返回时第三次调用拷贝构造函数
21 cout << b.getX() << endl;
22 return 0;
23 }
析构方法:
完成对象被删除前的一些清理工作,在对象的生存期结束之后,系统会自动调用它,然后再释放此对象所属的空间,如果程序中未声明析构函数,编译器将自动产生一个隐含的析构函数。
原文链接: https://www.cnblogs.com/Smart-Du/p/4312239.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/167733
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!