77范文网 - 专业文章范例文档资料分享平台

C++习题与解答(4)

来源:网络收集 时间:2019-03-11 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

int e1,e2; }; void main() {

E a(5,6),b(3,4); a.FunE(&b); b.FunE(a); }

答: Constructor called. e1=5,d2=6 Constructor called. e1=3,e2=4 In FunE(E &e). e1=3,e2=4 In FunE(E &e). e1=3,e2=4

6.

#include class F {

public:

class G {

public: G() {} G(int i) { g=i; } int GetValue() { return g; } void Print(F *p); private: int g; }myg;

friend class G; F(int i,int j):myg(i) { f=j; } private: int f; };

void F::G::Print(F *p) {

cout<f<

void main() {

F::G g; F f(5,10);

f.myg.Print(&f); g=f.myg;

cout<

7.5 编程题

1.按下列要求实现一个栈类的操作。该类名为Stack,包括如下操作:

16

(1)压栈操作:Push(); (2)弹栈操作:Pop();

(3)获取栈顶元素:Peer(); (4)判栈空操作:IsEmpty(); (5)判栈满操作:IsPull()。 设栈最多可存放50个整数。 栈中成员用数组表示。

编写一个程序,定义一个栈类的对象数组来验证该类操作。 答:栈的正常操作程序如下: #include #include class Stack {

public:

Stack(int i); ~Stack() { delete [] sta; } void Push(int i); int Pop(); void IsUpll() { if(tos==length) { cout<<\ return; } } int IsEmpty() { if(tos==0) { cout<<\ return 0; } } private: int *sta;; int tos,length; }; Stack::Stack(int i) { sta=new int[i]; if(!sta) { cout<<\ abort(); } tos=0; length=i; } void Stack::Push(int i) {

17

sta[tos]=i; tos++; } int Stack::Pop() { tos--; return sta[tos]; }

void main() { Stack a(50); a.Push(1); a.Push(2); a.Push(3); a.Push(4); a.Push(5); a.Push(6); a.Push(7); a.Push(8); a.Push(9); a.Push(10); cout<

判断栈的空、满操作,请读者修改上述程序。

2.按下列要求实现一个有关学生成绩的操作。 该类名为Student。

(1)每个学生的信息包含有姓名(字符数组)和成绩(int型)。 (2)共有5个学生,用对象数组表示。

(3)计算出5个学生中的最高分,并输出姓名及分数。 答:编程如下:

#include #include class Student {

public:

Student(char s[],int gr)

{ strcpy(name,s); grade=gr; } friend void fun(); private:

char name[10]; int grade; };

18

}

void main() { fun(); }

3.按如下要求编程验证子对象的有关操作。 (1)定义两个类A和类B。

(2)在类B中有两个类A的对象one,two。 验证如下事实:

(1)在类B的构造函数中应该包含对两个类A的子对象的初始化项,被放在成员初始化列表中。

(2)在类B的默认构造函数中隐含着子对象的初始化项。 (3)在类B的析构函数中也隐含着子对象的析构函数。 (4)调用子对象构造函数的顺序。

答:运行下列程序,从输出结果中分析要验证的4个事实。 程序内容如下:

#include class A {

public: A() { cout<<\ } A(int i) { a=i; cout<<\ ~A() { cout<<\ } int a; }; class B {

public: B() { cout<<\ } B(int i,int j,int k):two(j),one(k) { b=i; cout<<\ } void Print() { cout<

Student ss[5]={Student(\马力\王欣\李明\

Student(\赵亮\张京\

void fun() { int k=0; for(int i=0;i<5;i++) if(ss[i].grade>ss[0].grade) k=i; cout<<\最高分的学生姓名和成绩如下: \\n\

19

{ cout<<\ } private: int b; A one,two; };

void main() { cout<<\构造函数的调用情况:\\n\ static B bb0; B bb(1,2,3); cout<<\输出对象bb的数据成员值:\\n\ bb.Print(); cout<<\析构函数的调用情况:\\n\ }

7.6 简单回答下列问题

1. 对象指针可以指向一个有名对象,它可以指向一个无名对象吗?如何实现?

答:对象指针可以指向一个有名对象,也可以指向一个无名对象。例如,对象指针指向堆对象就是一个例子。假定己知类A,定义该类对象指针pa:

A *pa;

pa=new A(8);

pa就是一个指向类A的无名对象的指针。

2. 对象数组和对象指针数组的区别在哪里?

答:对象数组的元素是同一个类的若干个对象,对象指针数组的元素是指向同一个类的若干个对象指针。

3. 在一个类中定义了多个子对象,其构造函数调用子对象的构造函数的顺序取决于什么? 答:构造函数调用子对象的顺序取决于定义子对象的顺序,而与构造函数的成员初始化列表中给出的子对象速设无关。

4. 使用new运算符创建的对象,如果不使用delete运算符释放,它们会在生存期到了时

被系统释放吗? 答:不会。

5. 对象指针与对象引用作函数参数时具有相同的特点,为什么人们更喜欢使用对象引用

作函数参数呢?

答:因为使用对象引用比使用对象指针更简单。

第8章 继承性和派生类

练习题8

8.1 判断题

× 1.派生类只继承基类中的公有成员和保护成员,而不继承私有成员。 × 2.多重继承是指一个基类派生出多个派生类的情况。

20

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C++习题与解答(4)在线全文阅读。

C++习题与解答(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/516576.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: