• 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 }

     析构方法:

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

  • 相关阅读:
    [转载]IntelliJ IDEA常用设置
    sql server字段合并逗号隔开
    sql server字段合并逗号隔开
    [转载]Hana 学习资源
    SQL Server数据库实现异地备份
    SQL Server数据库实现异地备份
    SQL Server blocked access to procedure 'sys.xp_cmdshell'
    调用另一个进程,createprocess返回值正确,但被调进程连入口函数都没进入。
    需求做完后,需要拉相关人员确认下结果
    exe崩溃用windbgattach后有宝贵现场,可看程序退出线程等,千万不要清屏
  • 原文地址:https://www.cnblogs.com/Smart-Du/p/4312239.html
Copyright © 2020-2023  润新知