加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在构造函数中组织初始化列表的更好方法

发布时间:2020-12-16 10:06:34 所属栏目:百科 来源:网络整理
导读:有时需要在初始化const成员或没有默认构造函数之前对类构造函数参数进行一些处理. 例如,在Java中我可以这样做(不要问为什么,这只是一个例子): class A{ public A(int area,float aspectRatio) { int w = foo(area,aspectRatio); int h = bar(area,aspectRat
有时需要在初始化const成员或没有默认构造函数之前对类构造函数参数进行一些处理.

例如,在Java中我可以这样做(不要问为什么,这只是一个例子):

class A
{
    public A(int area,float aspectRatio) {
        int w = foo(area,aspectRatio);
        int h = bar(area,aspectRatio);
        image = new Image(w,h);
    }
    private final Image image;
}

在C中也是如此

class A
{
public:
    A(int area,float aspectRatio)
         : image(foo(area,aspectRatio),bar(area,aspectRatio))
    {
    }
private:
    const Image image;
}

随着更多成员需要复杂的初始化,初始化列表变得越来越可怕.有没有解决这个问题的方法?

UPD 1:
如果该成员没有复制构造函数该怎么办?只需在函数中提取函数的每个参数的计算结果?

解决方法

为它写一个静态成员函数:

class A
{
public:
    A(int area,float aspectRatio)
         : image(initImage(area,aspectRatio))
    {
    }
private:
    const Image image;
    static Image initImage(int area,aspectRatio);
        return Image(w,h);
    }
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读