C++之面向对象之构造函数和拷贝构造方法,以及析构方法

构造函数:用于初始化对象的相关属性,如果程序员没有指定声明构造函数,则系统默认声明一个无内容,无参数的构造函数,如果程序员自己声明了一个带参数的构造函数,则系统不会再提供任何构造函数

拷贝构造函数:只有在三种情况下,才会调用拷贝构造函数,第一种情况:使用已有的对象为刚创建出来的对象初始化时调用,第二种情况:使用对象作为某个函数的实参传递时调用,第二种情况:当一个函数的返回值是一个类对象时,当函数返回时调用。如果程序员没有为类声明拷贝构造函数,则系统自己生成一个隐含的拷贝构造函数,这个拷贝构造函数的功能是:用作为初始值的对象的每个数据成员的值,初始化将要建立的对象的对应的数据成员。

以下是一个简单的例子:

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 }

 析构方法:

  完成对象被删除前的一些清理工作,在对象的生存期结束之后,系统会自动调用它,然后再释放此对象所属的空间,如果程序中未声明析构函数,编译器将自动产生一个隐含的析构函数。

posted @ 2015-03-04 00:36  溈鉨wo乄菰単  阅读(396)  评论(0编辑  收藏  举报