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

C++ 类的构造函数使用规则

时间:2016-06-22 18:48:27      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

//类的构造函数使用规则
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

class PointA{

};

class PointB{
public:
    PointB(int _a, int _b, const char *pin/*in*/){
        x = _a;
        y = _b;
        remark = (char *)malloc(sizeof(char)*(strlen(pin) + 1));
        strcpy(remark, pin);
        cout << "我是自定义的有参构造函数4" << endl;
    }
private:
    int x;
    int y;
    char *remark;
};

class PointC{
public:
    PointC(PointC &pm){
        cout << "我是自定义的拷贝构造函数3" << endl;
        //修改拷贝构造函数
        x = pm.x;
        y = pm.y;
        //remark = pm.remark; 这句话错误
        //修改后的方案
        remark = (char *)malloc(sizeof(char)*(strlen(pm.remark) + 1));
        strcpy(remark, pm.remark);
    }
private:
    int x;
    int y;
    char *remark;
};

void ProtectA(){
    PointA p1;//调用默认无参构造函数
    PointA p2=p1;//调用默认拷贝构造函数
    //结论①:当类中没有定义任何一个构造函数时,c++编译器会提供无参构造函数和拷贝构造函数

    //PointB p3; //报错: error C2512: “PointB”: 没有合适的默认构造函数可用
    PointB p4(3,3,"455");//调用自定义有参构造函数
    PointB p5 = p4;//调用默认拷贝构造函数
    //结论②:当类中定义了任意的非拷贝构造函数(无参,有参),c++编译器不会提供无参构造函数,
    //但是如果类中也没有定义任意的拷贝函数,那么c++编译器还是会提供默认拷贝构造函数
     
    //PointC p6; //报错   error C2512: “PointC”: 没有合适的默认构造函数可用
    //结论③:当类中定义了拷贝函数时,c++编译器不会提供默认的无参构造函数

    //结论④:默认拷贝构造函数只是类成员变量间的简单赋值(详情参考类的浅拷贝)
}

void main(){
    

    system("pause");
}

 

C++ 类的构造函数使用规则

标签:

原文地址:http://www.cnblogs.com/zhanggaofeng/p/5607980.html

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