c++为什么有很多的初始化方法

 我来答
百度网友e096309
2017-11-17 · TA获得超过1327个赞
知道小有建树答主
回答量:501
采纳率:96%
帮助的人:416万
展开全部

初始化方法从大方面来说无非就三种:c的malloc方式,c结构的按顺序赋值的方式,c++的构造函数方式。

//比如有这么个结构
struct Point {
    int x, y;
};
//第一种就是用malloc申请好内存,然后再对成员逐个赋值
void testMalloc() {
    Point *pPoint = (Point *) malloc(sizeof(Point));
    pPoint->x = 1;
    pPoint->y = 2;
    free(pPoint);
}
//第二种就是按顺序赋值
void testInline() {
    Point point{1, 2};
}

第三种是构造函数,每次new或者定义栈变量,就会自动调用构造函数。

//比如定义很多种构造函数
struct Point {
    int x, y;
    //默认构造函数,不带任何参数
    Point(): x(0), y(0) {}
    //只带一个参数
    Point(int xx): x(xx), y(0) {}
    //带两个参数
    Point(int xx, int yy): x(xx), y(yy) {}
    //带三个参数,让x和y都乘以第三个参数
    Point(int xx, int yy, int multiply): x(xx*multiply), y(yy*multiply) {}
}

void testConstructors() {
    Point point1; //不带任何参数,x,y都是0
    Point point2(123); //只带一个参数,x是123,y是0
    Point point3(123, 456); //带两个参数,x=123, y=456
    Point point4(123, 321, 3); //带三个参数,x=369, y=963
    
    //同样的可以应用到new的情况:
    Point *p1 = new Point();
    Point *p2 = new Point(123);
    Point *p3 = new Point(123, 456);
    Point *p4 = new Point(123, 321, 3);
    
    delete p1;
    delete p2;
    delete p3;
    delete p4;
}

对于第三种,想定义什么样的构造函数,完全取决于你自己。怎么方便怎么来。

方式很多吗?不管用什么函数封装,或者使用工厂模式,其实本质就三这种。

ChengZiXianS
2017-11-16 · TA获得超过1011个赞
知道小有建树答主
回答量:1434
采纳率:72%
帮助的人:464万
展开全部
为了方便
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式