首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学者求指导!到底错哪了! 要哭了

2013-12-06 
菜鸟求指导!!到底哪里错了! 要哭了!#includeiostreamusing namespace stdclass Cow{char name[20]char

菜鸟求指导!!到底哪里错了! 要哭了!
#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:编译错误是啥贴出来呗

[解决办法]



引用:
有几个比较大的问题:
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;
}


//返回局部变量的引用,更不对

热点排行