用void setBookname(char * bk)来解决
时间: 2023-06-26 12:05:30 浏览: 57
这个问题不太清楚具体是什么问题需要解决,但是根据函数名和参数可以猜测是设置书名的函数。如果是这样,可以按照以下步骤实现:
1. 在类中定义一个私有变量用来存储书名,例如:`char *bookname;`
2. 在类的构造函数中初始化这个变量,例如:`bookname = NULL;`
3. 实现`setBookname`函数,其中需要注意以下几点:
- 函数参数应该是一个指向字符数组的指针,即`char *bk`。
- 在函数中需要先释放掉原来的书名,避免内存泄漏。
- 然后再用`strlen`函数获取`bk`的长度,并用`new`动态分配空间存储`bk`。最后将其复制到`bookname`变量中。
- 最终的函数实现可能类似于这样:
```c++
void setBookname(char *bk) {
if(bookname != NULL) {
delete[] bookname;
bookname = NULL;
}
int len = strlen(bk);
bookname = new char[len + 1];
strcpy(bookname, bk);
}
```
这样,就可以通过调用`setBookname`函数来设置书名了。
相关问题
用C++写 定义一个图书类(Book),该类的数据成员有:书名(bookname)、作者(authors)、页数(pages)、出版社(publishing_house)、价格(price),要求如下 : (1)图书的所有属性都是私有的,数据成员的类型根据实际情况来确定; (2)给该类添加相应的getXxx、setXxx函数(例如:char * getBookname()、void setBookname(char * bk))来获取、设置该类的私有成员; (3)给该类添加适当的构造函数、析构函数来初始化、清理对象; (4)在main()函数定义两本图书: 《C++程序设计》,谭浩强编著,485页,清华大学出版社,36.00元 《吹牛大王历险记》,拉斯伯等编著,149页,天津人民出版社,12.80元 然后将这两个对象的成员信息输出到屏幕上。
下面是实现上述要求的代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class Book {
private:
char *bookname;
char *authors;
int pages;
char *publishing_house;
float price;
public:
Book(char *bk, char *at, int pg, char *ph, float pr) {
bookname = new char[strlen(bk) + 1];
strcpy(bookname, bk);
authors = new char[strlen(at) + 1];
strcpy(authors, at);
pages = pg;
publishing_house = new char[strlen(ph) + 1];
strcpy(publishing_house, ph);
price = pr;
}
~Book() {
delete[] bookname;
delete[] authors;
delete[] publishing_house;
}
char* getBookname() {
return bookname;
}
void setBookname(char *bk) {
delete[] bookname;
bookname = new char[strlen(bk) + 1];
strcpy(bookname, bk);
}
char* getAuthors() {
return authors;
}
void setAuthors(char *at) {
delete[] authors;
authors = new char[strlen(at) + 1];
strcpy(authors, at);
}
int getPages() {
return pages;
}
void setPages(int pg) {
pages = pg;
}
char* getPublishing_house() {
return publishing_house;
}
void setPublishing_house(char *ph) {
delete[] publishing_house;
publishing_house = new char[strlen(ph) + 1];
strcpy(publishing_house, ph);
}
float getPrice() {
return price;
}
void setPrice(float pr) {
price = pr;
}
};
int main() {
Book book1("C++程序设计", "谭浩强", 485, "清华大学出版社", 36.00);
Book book2("吹牛大王历险记", "拉斯伯等", 149, "天津人民出版社", 12.80);
cout << "书名:" << book1.getBookname() << endl;
cout << "作者:" << book1.getAuthors() << endl;
cout << "页数:" << book1.getPages() << endl;
cout << "出版社:" << book1.getPublishing_house() << endl;
cout << "价格:" << book1.getPrice() << endl;
cout << endl;
cout << "书名:" << book2.getBookname() << endl;
cout << "作者:" << book2.getAuthors() << endl;
cout << "页数:" << book2.getPages() << endl;
cout << "出版社:" << book2.getPublishing_house() << endl;
cout << "价格:" << book2.getPrice() << endl;
return 0;
}
```
输出结果:
```
书名:C++程序设计
作者:谭浩强
页数:485
出版社:清华大学出版社
价格:36
书名:吹牛大王历险记
作者:拉斯伯等
页数:149
出版社:天津人民出版社
价格:12.8
```
优化以下代码:#include <iostream> #include<string.h> using namespace std; class Book { private: char bookname[30]; char authers[30]; char publishing_house[40]; int pages; float price; public: char getbookname(); char getauthers(); char getpublishing_house(); int getpages(); float getprice(); void setbookname(char *a); void setauthers(char *a); void setpublishing_house(char *a); void setpages(int a); void setprice(float a); Book(char*a,char*b,cahr*c,int d,float e) { strcpy(bookname,a); strcpy(authers,b); strcpy(publishing_house,c); pages=d; price=e; } }; char getbookname() { char*a=bookname; return a; } char getauthers() { char*a=authers; return a; } char getpublishing_house() { char*a=publishing_house; return a; } int getpages() { int a=pages; return a; } float getprice() { float a=price; return a; } void setbookname(char *a) { strcpy(bookname,a); } void setauthers(char *a) { strcpy(authers,a); } void setpublishing_house(char *a) { strcpy(publishing_house,a); } void setpages(int a) { pages=a; } void setprice(float a) { price=a; } int main() { Book a(char a="《C++程序设计》",char b="谭浩强编制",char c="清华大学出版社",d=484,e=36.00); Book b(char a="《吹牛大王历险记》",char b="拉斯伯等编著",char c="天津人民出版社",d=149,e=12.80); cout<<a.getbookname()<<" "<<a.getauthers()<<" "<<a.getpublishing_house()<<" "<<"页数:"<<a.getpages()<<"价钱:"<<a.getprice()<<endl; cout<<b.getbookname()<<" "<<b.getauthers()<<" "<<b.getpublishing_house()<<" "<<"页数:"<<b.getpages()<<"价钱:"<<b.getprice()<<endl; return 0; }
以下是优化后的代码:
#include<iostream>
#include<string.h>
using namespace std;
class Book {
private:
char bookname[30];
char authers[30];
char publishing_house[40];
int pages;
float price;
public:
Book(char* a="《C++程序设计》", char* b="谭浩强编制", char* c="清华大学出版社", int d=484, float e=36.00) {
strcpy(bookname, a);
strcpy(authers, b);
strcpy(publishing_house, c);
pages = d;
price = e;
}
char* getbookname() {
return bookname;
}
char* getauthers() {
return authers;
}
char* getpublishing_house() {
return publishing_house;
}
int getpages() {
return pages;
}
float getprice() {
return price;
}
void setbookname(char* a) {
strcpy(bookname, a);
}
void setauthers(char* a) {
strcpy(authers, a);
}
void setpublishing_house(char* a) {
strcpy(publishing_house, a);
}
void setpages(int a) {
pages = a;
}
void setprice(float a) {
price = a;
}
};
int main() {
Book a;
Book b("《吹牛大王历险记》", "拉斯伯等编著", "天津人民出版社", 149, 12.80);
cout << a.getbookname() << " " << a.getauthers() << " " << a.getpublishing_house() << " " << "页数:" << a.getpages() << "价钱:" << a.getprice() << endl;
cout << b.getbookname() << " " << b.getauthers() << " " << b.getpublishing_house() << " " << "页数:" << b.getpages() << "价钱:" << b.getprice() << endl;
return 0;
}
主要的修改如下:
1. 在类定义中,将所有的成员函数都定义在类的内部,并修改它们的访问修饰符为 public。
2. 在类定义中,将构造函数的参数都设置默认值,以免在创建对象的时候不必要地传递参数。
3. 在类定义中,将所有的成员变量都设置为 private。
4. 在类定义中,修改字符串类型成员变量的 getter 和 setter 函数,使它们返回和接收字符指针类型的数据。
5. 在类定义中,修改整型和浮点型成员变量的 getter 和 setter 函数,使它们返回和接收对应的数据类型。
6. 在主函数中,第一个 Book 对象 a 的构造函数调用中去掉了赋值语句,因为这些赋值已经在类的构造函数中完成了。
7. 在主函数中,第二个 Book 对象 b 的构造函数调用中省略了参数的类型,因为在构造函数定义中已经指明了它们的类型。
8. 在类定义中,修改 char 类型成员变量的 setter 函数,使它们使用 strcpy 函数进行赋值。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)