gpt4 book ai didi

当类具有另一个类的数组时,C++ 复制构造函数

转载 作者:行者123 更新时间:2023-11-28 02:04:46 25 4
gpt4 key购买 nike

我仍在学习类、复制构造函数和重载运算符,所以任何建议/帮助/->都非常感谢!!!

我正在尝试使用类 Test2 创建一个复制构造函数,该类具有来自另一个类 Test1 的私有(private)成员变量。我在代码中注释了给我业务的复制构造函数所在的位置。

这是我在编译时遇到的错误:

assOp.cpp: In copy constructor 'Test2::Test2(const Test2&)':
assOp.cpp:102:25: error: passing 'const Test2' as 'this' argument of 'int Test2:
:getNum()' discards qualifiers [-fpermissive]
setNum(original.getNum());
^
assOp.cpp:103:27: error: passing 'const Test2' as 'this' argument of 'char* Test
2::getChar()' discards qualifiers [-fpermissive]
setChar(original.getChar());

代码如下:

#include <iostream>
#include <cstring>
using namespace std;

class Test1
{
public:
Test1();
Test1(const Test1& original);
int getNum();
char *getChar();

void setNum(int x);
void setChar(char y[]);


private:
int num;
char *ch;

};

class Test2
{
public:
Test2();
Test2(const Test2& original);

void setNum(int x);
void setChar(char y[]);

int getNum();
char *getChar();

private:
Test1 foo;


};

int main()
{

Test1 a;
Test2 b;



return 0;
}

Test1::Test1()
{
num = 1234;
ch = new char[5];
strcpy(ch,"test");
}

Test1::Test1(const Test1& original)
{
int length = strlen(original.ch);

num = original.num;
ch = new char[length + 1];
strcpy(ch, original.ch);
ch[length] = '\0';

}

int Test1::getNum()
{
return num;
}

char *Test1::getChar()
{
return ch;
}

void Test1::setNum(int x)
{
num = x;
}

void Test1::setChar(char y[])
{
int length = strlen(y);
ch = new char[length + 1];
strcpy(ch, y);
ch[length] = '\0';

}

Test2::Test2()
{

}

//Sassy copy constructor that thinks its better than me
Test2::Test2(const Test2& original)
{

setNum(original.getNum());
setChar(original.getChar());


}

void Test2::setNum(int x)
{
foo.setNum(x);
}

void Test2::setChar(char y[])
{
foo.setChar(y);

}

int Test2::getNum()
{
return foo.getNum();
}

char *Test2::getChar()
{
return foo.getChar();
}
^

最佳答案

问题是由

引起的
    int getNum();
char *getChar();

因为这些函数不是const 成员函数,所以它们不能用在const 对象上。作为一般规则,将所有 getter 函数设为 const 成员函数。

    int getNum() const;
char const* getChar() const;

关于当类具有另一个类的数组时,C++ 复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37979288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com