zoukankan      html  css  js  c++  java
  • c++入门篇七

    拷贝构造函数的调用时机:

    class  Person {
    public:
        //构造函数
        Person() {
            //无参构造函数
        }
        Person(int  a) {
            //有参构造函数
            cout << "有参构造函数" << endl;
        }
        Person(const  Person  &p) {
            //拷贝构造函数,前面必须加const,拷贝过来的不能再修改了,固定的,就是说你拷贝过来了张三,不能再修改成张四(p.name=""),只能是原版张三
            //传过来的&p是对象,p就是指针
            age = p.age;//age被赋值
            cout << "拷贝构造函数" << endl;
        }
        ~Person()
        {
            cout << "析构函数" << endl;
        }
        int  age;
    };

    第一种:使用已经创建好的对象来初始化新的对象

    void  test01() {
        //拷贝构造函数的几种方式
        //第一种方式:直接赋值拷贝对象
        Person  p1;
        p1.age = 33;//已经创建好了对象 
        Person p2 = p1;//相当于拷贝了p1给p2
        fun(p2);

    第二种方式:值传递的方式拷贝

    //第二种方式:值传递的方式拷贝
    void  fun(Person &p1) {//相当于Person  p=Person(p2),拷贝构造函数,建议使用引用,节省一份新的开销,不用新的内存空间
        cout << "fun函数:" << p1.age << endl;
    
    }
    void  test01() {
        Person  p1;
        p1.age = 33;//已经创建好了对象 
        Person p2 = p1;//相当于拷贝了p1给p2
        fun(p2);//传递p2给fun函数

    第三种方式:以值方式返回局部对象

    //第三种:以值方式返回局部对象int xxx(){},Person  xxx(){},结构体或者是函数的话,都可以不去加()
    Person  fun1() {
        Person  p;
        p.age = 3333;
        return  p;
    }
        //第三种方式:
        Person  p3 = fun1();

    release模式下会做优化,debug模式下没有做优化

    release模式下结果:第三种方式的

  • 相关阅读:
    Visual Studio一直弹出“未将对象引用设置到对象的实例”对话框的处理
    C#如何将十六进制数字符串转byte[]?
    steam游戏存档迁移
    Java实现行列式计算
    Python中单引号、双引号、三引号的区别
    git基本使用方法
    windows(hexo)使用git时出现:warning: LF will be replaced by CRLF
    steam相关插件
    linux的后台运行相关命令
    Ubuntu下启动/重启/停止apache服务器
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10682698.html
Copyright © 2011-2022 走看看