首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++ - reference中复制数组

在c++ - reference中复制数组
EN

Stack Overflow用户
提问于 2016-09-30 23:19:16
回答 4查看 54关注 0票数 0

我有一个由dobule A2组成的matrix2d类。我正在尝试做一个构造函数,它接受相同类型的obejct,并将它的所有值复制到A2。我有一个问题,下面是类:

代码语言:javascript
复制
class matrix2D {
    public:
    double A[2][2];
    double Z[2][2];

    //Default Constructor.
    matrix2D() {
        A[0][0] = A[1][1] = 1;
        A[0][1] = A[1][0] = 0;
    }

    matrix2D(double x00,double x01, double x10, double x11) {
        A[0][0] = x00;
        A[0][1] = x01;
        A[1][0] = x10;
        A[1][1] = x11;
    }

现在我要创建一个构造函数,它接受matrix2D对象,然后将它的所有值都赋给A。

代码语言:javascript
复制
// Copy Constructor.
    matrix2D(matrix2D& Z) {
        for(int i = 0; i < 2; ++i) {
            for(int j = 0; j < 2; ++j) {
                   A[i][j]=*(Z[i][j]);
            }
        }
    }

它告诉我,我尝试将双精度值赋给matrix2d对象。为什么*Zi没有引用双精度?

解决:我做了Ai=Z.Ai :)!

EN

回答 4

Stack Overflow用户

发布于 2016-09-30 23:24:05

该行中的*没有任何意义。

有了这些数据,您根本不需要复制构造函数。但是,如果您必须实现一个,它需要类似于以下内容:

代码语言:javascript
复制
// Use const&, not just &.
// Use a more suitable variable name for the copy
matrix2D(matrix2D const& copy) {
    for(int i = 0; i < 2; ++i) {
        for(int j = 0; j < 2; ++j) {
               A[i][j]= copy.A[i][j];  // Copy A
               Z[i][j]= copy.Z[i][j];  // Copy Z.
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-09-30 23:27:50

您的复制构造函数有问题,您正在隐藏其中一个成员(成员名称Z和参数名称Z)。

我建议不要编写自己的复制构造函数,让编译器为您生成一个:

代码语言:javascript
复制
matrix2D(const matrix2D & value) = default;
票数 1
EN

Stack Overflow用户

发布于 2016-09-30 23:32:13

添加第二个答案。这是我更喜欢的答案。

只需从类声明和定义中完全删除复制构造函数即可。

假设您的类只包含一对大小固定的数组,则不需要复制构造函数。编译器会自动为你生成一个。通常只有当您的类动态分配了成员变量,并且您需要确保指针值不会在实例之间产生别名时,才需要自定义复制构造函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39794870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档