好文档 - 专业文书写作范文服务资料分享网站

大学C++期末考试试卷(含答案)

天下 分享 时间: 加入收藏 我要投稿 点赞

F面的程序是关于 CBook类的一个定义,试改正程序中的错误。(共10

分)

#include

#include #inlcude class CBook{ private:

char *p_book; public:

p_book=new char[strlen(p_val)+1] CBook(const char *p_val) { p_book = new char[strlen(p_val)]; strcpy(p_book, p_val);

}

void print() const { cout <

}

};

void main(){

char book_title[60]; CBook *p_book_obj; cout << cin >>p; CBook abook(p); p_book_obj = &abook; p_book_obj->print();

}

“Enter book title: ” ;

三、根据如下所示程序,回答下列问题(共 10分)

#include class CJournal{ public:

CJournal () { cout <<“ Journal default constructor ” <

void read () { cout << “ Read paper ” <

~CJournal () { cout << “ Journal default destructor ” <

class CComputerDesign : public CJournal{ public:

CComputerDesign () {cout <<“《 Computer Design 》 default constructor virtual <

<

void subscribe () { cout <<“ Subscribing 《 Computer Design 》 void read () {cout <<“ Reading 《 Computer Design 》” <

void main(){

CComputerDesign journal1; CJournal *p_journal;

journal1.subscribe(); journal1.read();

“《 Computer Design 》 default destructor

// ①

p_journal = &journal1;

p_journal->subscribe(); p_journal->read();

}

1. 当程序运行到①处时,写出程序运行的输出结果 (3分)

2. 当程序结束时,程序会在第 1 问的基础上增加哪些输出。 (4 分)

3. 若在主函数中定义一个对象 CJournal journal; 程序编译时会否出错?为什么? (3 分)

四、编程题 ( 共 40 分 )

1. 定义一个商品类 CGoods其中包含商品号(Iong no)、商品名(char *p_name)、商 品价格 (double price) 三个数据成员,以及相应的构造函数、拷贝构造函数、析构函数、 打印数据成员的成员函数。 (10 分) #incIude #incIude using namespace std; cIass CCourse{ private:

Iong no; char *p_name; fIoat credit; pubIic:

CCourse(Iong no_vaI,char p_vaI,fIoat credit_vaI); CCourse(const CCourse &r_course); ~CCourse(){deIete p_name;} void print() const; };

CCourse:CCourse(Iong no_vaI,char p_vaI,fIoat credit_vaI){ no=no_vaI;

p_name=new char[strIen(p_vaI)+1]; strcpy(p_name,p_vaI); credit=credit_vaI;

}

CCourse:CCourse(const CCourse &r_course){ no=r_course.no;

p_name=new char[strIen(r_course.p_name)+1]; strcpy(p_name,r_course.p_name); credit=r_course.credit;

}

void CCourse:print() const{ cout<<\

name\

}

2. 为CGoods类增加一个商品总数 (int count) 数据成员,并增加一个成员函数 getCount()获取count的值,编写一个友元函数getName()获取商品名称p_name做如上 修改后,重新实现CGoods类(与第1问相同的不用再重复)。(10分)

3. 为CGoods类定义小于运算符(‘ <')和不小于运算符(‘ >=')两个运算符重载函 数。CGoods类对象大小的比较是根据其商品价格(price)的值的大小来实现的。(与第2 问相同的不用再重复 )(10 分)

4. 以CGoods类为基类,派生出服装类 CClothes和食品类CFood两个派生类,并在这 两个类中分别增加一个表示品牌的指针数据成员 (char *p_brand) 和表示用途的成员函数 (void

usedFor() ——可分别输出一条表示服装和食品用途的信息 ) 。写出 CClothes 类和 CFood类的完整定义(包括构造、析构和usedFor()成员函数的实现)。(10分)

五、附加题 (共 30分。注意:确保基本题成绩能达到 75分以上,再尝试做附 加题!)

1. 在基本题第四题的基础上,在CGoods类增加总商品数(long total_goods)和商品总价 格(double total_price) 两个数据成员,以及相应的获取这两个数据成员值的成员函数

getTotalGoods() 和 getTotalPrice() 。(注意说明数据成员和成员函数的存储类型,以便 能够用类名来调用 getTotalGoods() 和 getTotalPrice() 这两个函数)。为了能够采用动态 联编的方式调用派生类的usedFor()成员函数,应该在CGoods类及其派生类CClothes和 CFood类中作何改动? (15分)

2. 编写一个实现两个数交换的函数模板 swap,然后使用该函数模板再编写一个对具有 n 个数组元素(通用类型)的数组采用冒泡排序算法进行排序的函数模板。 (15 分)

答案 二、

#include 改为 #include

p_book = new char[strlen(p_val)] 改为 p_book = new char[strlen(p_val)+1] CBook abook; 改为 CBook abook(p);

p_book_obj = abook 改为 p_book_obj = &abook; p_book_obj.print() 改为 p_book_obj->print();

(该对得 2分,未改或改错得 0分,正确之处该成错误倒扣 1 分)

三、

1. Journal default constructor

<> default constructor Subscribing <> Reading <>

( 全部答对得 3 分,答错或漏答一条输出扣 1 分 ) 2. Subscribing <> Reading paper

<> default destructor Journal default destructor

( 全部答对得 4 分,答错或漏答一条输出扣 1 分 ) 3.

会出错,因为 CJournal 中包含有纯虚函数,故 CJournal 是抽象类,不能定义抽象类对象。

( 答对编译会出错得 1 分,答对原因得 2 分。 )

四、

1. #include #include using namespace std; class CCourse{ private: long no; char *p_name; float credit; public:

CCourse(long no_val, char *p_val, float credit_val); CCourse(const CCourse &r_course); ~CCourse() { delete p_name; } void print() const; };

CCourse::CCourse(long no_val, char *p_val, float credit_val){ no = no_val;

p_name = new char[strlen(p_val)+1]; strcpy(p_name, p_val); credit = credit_val; }

CCourse::CCourse(const CCourse &r_course){ no = r_course.no;

p_name = new char[strlen(r_course.p_name)+1]; strcpy(p_name, r_course.p_name); credit = r_course.credit; }

void CCourse::print() const{

cout <<\\}

( 数据成员定义正确得 2 分,部分正确得 1 分,不正确得 0 分 每个成员函数定义正确得 2 分,每个成

员函数有小错误扣 1 分,完全不正确不得分 )

2. 在 class CCourse 定义中增加一条:

private: static int total_course;

( 答对得 1 分,未加 static 得 0 分) 在类外部增加一条: int CCourse::total_course = 0;

( 答对得 1 分,答错或漏答得 0 分 ) 在 CCourse 类的构造函数中增加一条: total_course++; ( 答对

得 1 分) 在 CCourse 类的拷贝构造函数中增加一条: total_course++; ( 答对得 1 分) 在 CCourse 类的析构函数中增加一条: total_course--; ( 答对得 1 分) 在 class CCourse 定义中增加一条: public:

static getTotalCourse() { return total_course; }

( 答对得 2 分,未加 static 得 1 分) 在 class CCourse 定义中增加一条: friend char *getCourseName(const CCourse &r_course);

( 答对得 1 分,未加 friend 得 0 分) 在类外部定义: char *getCourseName(const CCourse &r_course){ return r_course.p_name; ( 答对得 2 分)

3. 在 class CCourse 定义中增加一条: public:

bool operator <(const CCourse &r_course); ( 答对得 2 分)

在类外部定义:

bool CCourse::operator <(const CCourse &r_course){ if (credit

return false; ( 答对得 3 分) 在 class CCourse 定义中增加一条: public:

bool operator >=(const CCourse &r_course); ( 答对得 2 分) 在类外部定义: bool CCourse::operator >=(const CCourse &r_course){ if (credit >= r_course.credit) return true; else

return false; }

( 答对得 3 分)

4.

class CHLP : public CCourse{ private:

char *p_openby; public:

CHLP(long no_val, char *p_val, float credit_val, char *p_open) : CCourse(no_val, p_val, credit_val){ p_openby = new char[strlen(p_open)+1]; strcpy(p_openby, p_open); }

~CHLP() { delete p_openby; }

void studyFor() { cout <<\};

( 答对得 5 分,其中构造函数 3 分,析构函数 1 分, studyFor() 函数 1 分) class COOP : public CCourse{ private:

char *p_openby; public:

COOP(long no_val, char *p_val, float credit_val, char *p_open) : CCourse(no_val, p_val, credit_val){ p_openby = new char[strlen(p_open)+1]; strcpy(p_openby, p_open); }

~COOP() { delete p_openby; }

void studyFor() { cout <<\};

( 答对得 5 分,其中构造函数 3 分,析构函数 1 分, studyFor() 函数 1 分)

五、

1. 在 class CCourse 定义中增加一条:

public:

virtual void studyFor() { cout <<\

大学C++期末考试试卷(含答案)

F面的程序是关于CBook类的一个定义,试改正程序中的错误。(共10分)#include#include#inlcudeclassCBook{private:char*p_book;public:p_book=newch
推荐度:
点击下载文档文档为doc格式
0jqnp6vpxd02tjb2ixwe3xy6q955i0014q8
领取福利

微信扫码领取福利

微信扫码分享