C++课后习题 联系客服

发布时间 : 星期一 文章C++课后习题更新完毕开始阅读9e4230dc0b4e767f5acfcedc

博学谷——让IT教学更简单,让IT学习更有效

需要进行深拷贝,反之,没有重新分配资源,只进行浅拷贝。 四、简答题

13、请简述一下构造函数的定义语法。

14、请简述一下友元的概念以及友元的副作用。 15、设计一个Bank类,实现银行某账号的资金往来账目管理,包括建账号、存入、取出等。 要求: 1)Bank类包括私有数据成员top(当前账指针),date(日期),money(金额),rest(余额)和sum(累

计余额)。

2)另有一个构造函数和三个成员函数bankin()(处理存入账),bankout()处理取出账)和disp()

(输出明细账)

第二章答案

1、private 2、this

3、成员对象类A 4、(*p). 5、C 6、D 7、B 8、C 9、错 10、错 11、对 12、对 13、

(1)、构造函数名与类名相同。

(2)、构造函数名前没有返回值类型声明。

(3)、构造函数中不能通过return语句返回一个值。 (4)、通常构造函数具有public属性。

14、友元可以是一个函数,该函数被称为友元函数,友元也可以是一个类,称为友元类。 当一个函数或类是一个类的友元时,那么这个友元函数或友元类就可以直接访问类中的所有成员,这样就提高了程序运行效率,也使操作比较方便。但它的不足之处在于破坏了类的封装性,类的出现主要就是为了封装数据,使信息更安全,而友元的出现恰恰破坏了这一初衷,因些在使用友元时要谨慎,如果可以,尽量避免使用。 15、

#define _CRT_SECURE_NO_WARNINGS #include #include using namespace std; #define Max 100 class Bank { int top;

博学谷——让IT教学更简单,让IT学习更有效 char date[Max][10]; // 日期 int money[Max]; // 金额 int rest[Max]; // 余额 static int sum; // 累计余额 public: Bank(){ top = 0; } void bankin(char d[], int m) { strcpy(date[top], d); money[top] = m; sum = sum + m; rest[top] = sum; top++; } void bankout(char d[], int m) { strcpy(date[top], d); money[top] = -m; sum = sum - m; rest[top] = sum; top++; } void disp(); };

int Bank::sum = 0; void Bank::disp() { int i; //printf(\日期存入取出余额\\n\ cout << \日期存入取出余额\ for (i = 0; i

void main()

博学谷——让IT教学更简单,让IT学习更有效 { }

Bank obj;

obj.bankin(\obj.bankin(\obj.bankout(\obj.bankout(\obj.disp();

system(\

第三章题目

一、填空题

1、如果类α继承了类β,则类α称为类,而类β称为类。类的对象可作为类的对象处理。 2、派生类对象占用的空间中,的数据成员排列在前,的成员排列在后。 3、应在下列程序划线处填入的正确语句是() #include class Base{ public:

void fun() {

cout<<\} };

class Derived:public Base{

void fun()  {

;//显式调用基类的函数fun()  cout<<\ } };

4、C++中多态性包括两种多态性:和。 二、选择题

5、下列关于继承的描述中,错误的是( )。 A、基类的构造函数和析构函数不可被继承

B、派生类继承了基类的全部数据成员和除了构造、析构函数之外的所有成员函数。 C、派生类可以添加新成员,用于实现新功能;也可以舍弃继承于基类的成员,用于删除不需要的功能。

D、多个派生类可以继承自同一个基类。

6、下列关于继承权限的说法中,错误的是()。

A、基类的protected成员在派生类中仍然是protected的

B、基类的protected成员在public派生类中仍然是protected的 C、基类的protected成员在private派生类中是private的

博学谷——让IT教学更简单,让IT学习更有效

D、基类的protected成员不能被派生类的对象访问7、 7、有如下程序: #include using namespace std; class A{ public:

A() { cout << ‘A’; } ~A() { cout << ‘C’; } };

class B: public A{ public:

B() { cout << ‘G’; } ~B() { cout << ‘T’; } };

int main() {

B obj; return 0; }

执行后的输出结果是( )。 A、GATC B、AGTC C、GACT D、AGCT

8、下列关于多重继承容易引起二义性的说法中,错误的是()。 A、多个基类中的成员同名时,派生类对象中会有多个副本

B、多个基类中的成员同名时,可以用作用域限定符来标识调用哪个基类的成员 C、派生类中定义了与基类同名函数,则基类函数将被隐藏

D、多重继承中派生类有多个基类,多个基类又可能由同一个基类派生,则在派生类中访问公共基类成员时就不会出现二义性 三、判断题

9、不管哪种继承方式,基类中的私有成员都会变成派生类中的不可访问成员。 10、基类与派生类对象之间具有赋值兼容的关系,可以进行类型间的转换。

11、多继承中,派生类的构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。 12、虚基类的派生生类对象中都会增加一个隐藏的“虚基类表指针”(vbptr)成员变量。 四、简答题

13、简单叙述派生类与基类的赋值兼容规则。

14、简述一下实现多态的两个必要条件,以及C++编译器是如何实现虚函数。 15、请简述在面向对象程序设计中,使用内部类的优点。

16、声明一个Shape抽象类,在此基础上派生出Rectangle和Circle类,二者都有GetArea( )函数计算对象的面积,GetPerim( )函数计算对象的周长。