c++题目,哪里有问题?怎么改?

下面的程序可以运行,结果为:书名:中国足球内幕作者:李承鹏价格:29元书名:傻儿皇帝:阿斗回忆录作者:王新禧价格:25元运行结果看来也正确。但这个程序有问题,请仔细分析找... 下面的程序可以运行,结果为:

书名:中国足球内幕

作者:李承鹏

价格:29 元

书名:傻儿皇帝:阿斗回忆录

作者:王新禧

价格:25 元

运行结果看来也正确。但这个程序有问题,请仔细分析找出问题并修改完善。

#include<iostream>

usingnamespace std;

#include<string>

class Book {

public:

void setBook(constchar*str1,constchar*str2,constfloat num){

int len=strlen(str1);

title=newchar[len+1];

strcpy(title,str1);

len=strlen(str2);

author=newchar[len+1];

strcpy(author,str2);

price=num;

}

Book() {}

Book(constchar*str1,constchar*str2,constfloat num)

{setBook(str1,str2,num);}

~Book(){delete title; delete author;}

void print(){

cout<<"书名:"<<title<<endl;

cout<<"作者:"<<author<<endl;

cout<<"价格:"<<price<<" 元"<<endl;

}

private:

char*title;

char*author;

float price;

};

int main(){

Book obj1("中国足球内幕","李承鹏",29.0),obj2(obj1);

obj1.print();

obj2.setBook("傻儿皇帝:阿斗回忆录","王新禧",25.0);

obj2.print();

return 0;}
展开
 我来答
cxwtc123
2014-04-24 · TA获得超过160个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:176万
展开全部
  1. setBook () 存在内存泄露的可能性,new 之前应先判断 指针是否有效,有效 先 delete 再 new

  2. ~Book() 未判断指针是否有效,应先判断 有效 才能 执行delete ,如 if(NULL != ptr) delete ptr;

  3. Book() 默认构造函数未对成员进行初始化,指针应初始化为NULL,如:

Book()
:title(NULL),author(NULL),price(0.0)
{
}
bd804099068
2014-04-24 · 超过35用户采纳过TA的回答
知道答主
回答量:109
采纳率:0%
帮助的人:95.7万
展开全部
把string头文件改为string.h再试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式