问答题 请使用VC6或使用[答题]菜单打开考生文件夹proj1下的工程proj1,此工程中包含源程序文件main.cpp,其中有类Book(“书”)和主函数main的定义。程序中位于每个“//ERROR ****found****”之后的一行语句行有错误,请加以改正。改正后程序的输出结果应该是: 书名:C++语言程序设计 总页数:299 已把“C++语言程序设计”翻到第50页 已把“C++语言程序设计”翻到第51页 已把书合上。 书是合上的。 已把“C++语言程序设计”翻到第1页 注意:只修改每个“//ERROR ****found****”下的一行,不要改动程序中的其他内容。 #include <iostream> using namespace std; class Book{ char * title; int num_pages; //页数 int cur page; //当前打开页面的页码,0表示书未打开 public: Boek(const char * theTitle, int pages):num pages(pages) { //ERROR ********** found********** title =new char[strlen(theTitle)]; strcpy(title, theTitle); cout <<endl <<"书名:"<<title <<"总页数:" <<num_pages; } Book{){ delete []title; } // ERROR ********** found********** bool isOpen () const { return num_pages!=0;} //书打开时返回true,否则返回false int numOfPages()const{ return num_pages;} //返回书的页数 int currentPage()const{ return cur_page;} //返回打开页面的页码 void openAtPage(int page no){ //把书翻到指定页 cout << endl; if(page_no <1 ||page_no >num_pages){ cout <<"无法翻到第" <<cur_page<<"页。"; close(); } else{ cur_page = page_no; cout <<"已把“"<< title <<"”翻到第" << cur_page <<"页"; } } void openAtPrevPage{) { openAtPage (cur page-1); } //把书翻到上一页 void openAtNextPage () { openAtPage (cur_page +1); } //把书翻到下一页 void close () { //把书合上 cout << endl; if(! isOpen ()) cout << "书是合上的。"; else{ //ERROR ********** found********** num_pages =0; cout <<"已把书合上。"; } cout << endl; } }; int main () { Book book ("C++语言程序设计", 299); book.openAtPage (50); book.openAtNextPage (); book.close (); book.close (); book.openAtNextPage (); return 0; }
【正确答案】(1)title=new char[strlen(theTitle)+1]; (2)bool isOpen()const{return cur_page !=0;} (3)cur_page=0;
【答案解析】[考点] 本题考查的是Book类,其中涉及构造函数、析构函数、bool函数和const函数。 [解析] (1)主要考查考生对动态分配的掌握情况,如果要复制字符串theTitle,就要分配空间,空间大小应该为theTitle的长度加1。 (2)主要考查考生对bool函数的掌握情况,根据私有成员定义:int cur_page;//当前打开页面的页码,0表示书未打开,可知应该返回cur_page !=0;。 (3)主要考查考生对成员函数的掌握情况,根据私有成员定义:int cur_page;//当前打开页面的页码,0表示书未打开,可知应给cur_page赋值为0。