菜鸟求指导!!到底哪里错了! 要哭了!
#include<iostream>
using namespace std;
class Cow
{
char name[20];
char* hobby;
double weight;
public:
Cow();
Cow(const char *num, const char *ho, double wt);
Cow(const Cow &c);
~Cow();
Cow & operator=(const Cow &c);
void showCow() const;
};
Cow::Cow(const char *num, const char *ho, double wt)
{
strcpy_s(name, num);
hobby = (char*)ho;
weight = wt;
}
Cow::Cow(const Cow &c)
{
strcpy_s(name, c.name);
hobby = c.hobby;
weight = c.weight;
}
Cow & Cow::operator=(const Cow &c)
{
Cow o;
strcpy_s(o.name, c.name);
o.hobby = (char*)c.hobby;
o.weight = c.weight;
return o;
}
void Cow::showCow() const
{
cout << "name: " << name << "hobby: " << hobby << "weight: " << weight << endl;
}
int main()
{
Cow c = Cow("feifeit", "qiaodaima", 75);
c.showCow();
Cow w = Cow(c);
w.showCow();
Cow o = w;
o.showCow();
}
老是编译不成功! 求教!
[解决办法]
有几个比较大的问题:
1.析构函数没有实现。~Cow();
2.
Cow & Cow::operator=(const Cow &c)
{
Cow o;//没有定义无参构造函数这里肯定不对。而且为什么要返回对局部变量的引用?
strcpy_s(o.name, c.name);
o.hobby = (char*)c.hobby;//这里不对,对于指针,要用深拷贝,重新对hobby申请空间
o.weight = c.weight;
return o;
}
[解决办法]
总的来说我觉得楼主还是好好看看书,问题其实还挺多的。类的构造、析构、拷贝构造是非常基本的东西,而且拷贝构造如果成员是指针必须进行深拷贝,即重新new一片内存,否则析构的时候会引起重复释放同一片内存区域的问题。
其实好些公司面试的时候会考这么一道基础题,就是关于自定义的String类的构造、拷贝构造、析构、赋值等等的实现。这是比较基础的东西。
大可以参考一下http://blog.sina.com.cn/s/blog_5dd2af0901012i19.html
[解决办法]
Cow(){} //无参构造函数的实现
~Cow(){} //析构函数的实现!
ps:编译错误是啥贴出来呗
[解决办法]
//返回局部变量的引用,更不对