【发布时间】:2019-11-07 14:54:09
【问题描述】:
前辈! 我一直被困在这个话题上,找不到为 K1 和 K2 类编写跟随构造函数(和方法)的方法:
- 默认构造函数
- 复制构造函数和重写方法。
- 正确的重载运算符
class K1 {
string* p1; // p1 in future should be dynamic array
public:
K1() : p1(new string) {}; // my version of def. constructor
~K1() { delete p1; }; // destructor
K1(const K1& k) : p1(new string(*k.p1)) {}; // my version of copying constructor
K1& operator= (const K1& copy) { // rewriting method in my vision
*p1 = *copy.p1;
return *this;
}
};
class K2 {
K1 p1;
double p2;
public:
K2(const string & one, const string & two, const double & price) // mostly stucked here: how can i reforward data from here to K1`s pointer (which is an array)
};
int main() {
K2 ob1, ob2; // testing code
const K2* wsk1 = new K2("kawa", "z mlekiem", 4.50);
const K2 ob3(*wsk1);
delete wsk1;
K2* wsk2 = new K2(ob3);
ob2 = *wsk2;
cout << ob3;
return 0;
}
提前感谢您的帮助,伙计们!
【问题讨论】:
-
还有什么问题?到目前为止什么不起作用?编译错误?运行时错误?有什么不想要的结果?陈述一个特定的问题。除此之外,如果你使用合适的容器,你的生活会更轻松,在你的情况下可能是
std::vector<std::string> p1;。此外,new的任何使用都可能发生错误(不是在您的代码中,而是在将来的某个时候,它会),尝试通过使用容器和智能指针来尽可能少地使用它(比如std::shared_ptr)。 -
另外,尝试使用描述性名称。我们不知道 K1 和 K2 应该是什么以及您要达到的目标。如果他们有 Student 或 ComplexNumber 这样的名字,我们可以提供更好的建议。成员和变量也是如此。
-
"
string* p1; // p1 in future should be dynamic array",所以std::vector<std::string>和 0 规则 :-)