码迷,mamicode.com
首页 > 编程语言 > 详细

<C++ - 拷贝构造> 2018-01-12

时间:2018-01-24 22:00:09      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:names   ret   实参   post   关于   释放内存   etc   指针   body   

 

#include <iostream>
using namespace std;
/*
    回顾上节的内容:
        1.构造和析构
        2.new  delete
        3.delete[]

    新的知识

        1.拷贝构造 ->构造函数  函数名和类名相同  没有返回值
            定义: 用拷贝的方式构造对象  调用拷贝构造
                参数为 该类对象的构造函数

        关于引用:
            1.拷贝构造  参数必须为引用
            2.加引用

*/
//========================================类函数======================================
class A
{
private:
    char *arr;   // 指针
    int x;
public:
    A()        // 参构造函数    没有返回值  自动调用
    {
        cout << "调用无参构造函数" << endl;
        this->arr = NULL;    // 给对象中的arr赋值
        this->x = 0;
    }    
    A(int x)
    {
        cout << "调用有参构造函数" << endl;
        this->arr = new char[x];    // 申请内存
        this->x = x;
    }
    A(A & other)  // 拷贝构造       
    {
        /**
        参数是同类型的对象   other形参 -->相当是 sum   
        shis指向当前对象相当于 (23)的fnu   
        other拷贝的是sum --> 调用拷贝构造函数  所以必须加引用

        拷贝 -->内容拷贝  直接用参数  定义一个新的形参
        引用  取别名 不全定义新的形参
        */
        cout << "拷贝构造函数" << endl;
        this->arr = other.arr;
        this->x = other.x;
    }
    ~A()    // 析构函数  --> 没有返回值  没有参数  自动调用
    {
        cout << "调用析构函数" << endl;
        if (arr != NULL)
        {
            delete[]arr;   // 释放内存
            arr = NULL;
        }
    }
    void mamied(A other)
    {
        cout << "是否婚配" << endl;
    }
};
/**
    new  delete  申请对象的内存空间的时候 调用对象的构造/析构函数
    delete[]  调用每个对象的析构函数
*/

//==========================================新内容====================================


int main()
{
    {
        A sum;                // 定义一个对象sum   在栈区 (调用无参构造)
        A fnu(sum);            // 调用拷贝构造   (23)
        sum.mamied(fnu);    // 函数 传参  实参 -->形参赋值  形参拷贝实参

    }
    
    getchar();
    return 0;
}

 

<C++ - 拷贝构造> 2018-01-12

标签:names   ret   实参   post   关于   释放内存   etc   指针   body   

原文地址:https://www.cnblogs.com/guijin/p/8343125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!