• c++类与对象(1)——构造,复制构造函数


    1. CPP的类与对象:

    当我们定义一个基本类型变量时,方法如下:

    int p;        #定义一个int类型变量
    bool b;      #定义一个bool类型变量       
    float c ;      #定义一个float类型变量

     显然定义变量p适用于存储整数类型的,变量b是用于存储布尔类型的,变量c是用于存储浮点数类型的。但是变量声明的意义不只是这个,另一个同样重要的意义就是限定对变量的操作。例如:对p可以进行算术运算,比较运算等,对b可以进行逻辑运算等。这就说明每一种数据类型都包括了数据本身的属性以及对数据的操作。

      但实际上C++定义的基本类型并不能满足现实世界中各种对象的需要,于是C++提供了对自定义类型的支持,这就是类。类实际上就是用户自定义的一种数据类型,通过对现实世界的对象进行数据抽象和功能抽象,得到类的数据成员和函数成员。当定义了一个类之后,便可以定义该类型的变量,这个变量就称为累的对象(或实例),这个定义的过程也称为类的实例化。

    类的函数:

    构造函数:是类的一种特殊的成员函数,它会在每次类被创建时被调用。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。在程序运行中,当遇到对象声明语句时,程序会向操作系统申请一定的内存空间用于存放新建的对象。构造函数的作用就是在对象被创建的过程中利用特定的值初始化这个对象。

    默认构造函数:未提供显式初始值时,用来初始化对象的构造函数。

    拷贝构造函数/复制构造函数:拷贝构造函数是一类特殊的构造函数,是使用同一类中之前创建的对象来初始化新创建的对象。

    通常用于:

     

      1. 当用类的一个对象去初始化该类的另一个对象时;
      2. 如果函数的形参是类的对象,调用函数时,进行形参和实参的结合是。
      3. 如果函数的返回时类的对象,函数执行完成返回调用者时。

    析构函数:它用来完成对象被删除前的一些清理工作。析构函数实在对象的生存期即将结束的时刻被自动调用的。

    示例代码:

    #include<iostream>
    using namespace std;
    
    //Point类的定义
    class Point {
    public:
       Point(){
       cout <<"调用默认构造函数"<<endl;
       } //默认构造函数
    Point(
    float xx,float yy) { x = xx; y = yy; } //构造函数
    Point(Point &p){
       x = p.x;
    y = p.y;
    cout << "调用拷贝构造函数"<<endl;
    } //拷贝构造函数
    int getX() { return x; } int getY() { return y; } private: //私有数据成员 float x, y; };

    第一种情况示例:

    int main() {
        Point a(1, 2);
        Point b(a);                //用对象a初始化实例b,复制构造函数被调用
        Point c = a;               //用对象a初始化实例c,复制构造函数被调用
        cout << b.getX() << endl;
        cout << c.getX() << endl;
        return 0;
    }

     运行结果:

    第二种情况示例:

    void f(Point p) {
        cout << p.getX() << endl;
    }
    int main() {
        Point a(1, 2);
        f(a);                          //函数的形参为类的对象,当函数调用时,可以理解为用对象a初始化函数形参p,构造函数被调用。
        return 0;
    }

    运行结果:

    第三种情况示例:

    //定义一个返回值类型为Point类型的函数
    Point g() {
        Point a(1, 2);
        return a;
    }
    int main() {
        Point b;      
        b = g();
        cout << b.getX() << endl;
        return 0;
    }

     运行结果:

  • 相关阅读:
    mac上finalShell的安装
    c 字符串与字符串操作
    .net5 MailKit
    c 99乘法表
    element 动态表单加自定义校验
    遇到的问题 vscode 问题
    vue-element-admin eslint 规则查询表
    利用html2canvas 导出网页 (只是用于自己的笔记,如果需要看配置,自行查找插件api)
    git 常用命令
    uniapp中自动打包微信小程序后自动上传代码
  • 原文地址:https://www.cnblogs.com/wobu/p/8884817.html
Copyright © 2020-2023  润新知