2011-2012-1学期 c++第7章-类和对象2-习题学生-20110921
《类与对象》课后习题(含答案)
问题一:程序执行结果是
问题二:本程序中,y、z 是 class Test{ public: static int Data; }; int Test::Data=100; //A void main(void) { Test t1,t2; t1.Data=200; t2.Data=300; //B //C
2、写出程序的输出结果。 #include <iostream> #include <cstring> using namespace std; class SomeClass { int One , Two; public: SomeClass(int a = 1, int b = 1) { One = a; Two = b; cout << "Structor" << endl; } SomeClass(SomeClass &obj) { { cout<<NumA<<'\t'<<"is Destructor."<<endl; } }; int main() { MyTestClass Myclass1(5), Myclass2.Print(); return 0; } 程序的运行结果为: Myclass2(Myclass1);
,第二行是
A.show( ); } 15 10 三、程序填空题
B.show( );
1、完成如下的类,在横线中填写合适的内容。 #include <iostream> #include <cstring> using namespace std; enum Esex{mid , man , woman};//枚举请自学 2.7 class Person { int Num; //编号 char Name[12]; //姓名 Esex Sex; //性别 float Weight; //体重 public: Person(int , char * , Esex , float); Person(); ~Person() {} void PrintInfo(); int Workdays(); }; Person::Person( { Num = id; int id ,char *name , Esex s , float w)
C程序设计(第2版)第七章习题解答.doc
C程序设计(第2版)第七章习题解答第七章动态内存分配习题一、基本概念与基础知识自测题7.1 填空题7.1.1 C/C++定义了4个内存区间:(1)、(2)、(3)和(4)。
答案:(1)代码区,存放程序代码;(2)全局变量与静态变量区,存放全局变量或对象(包括静态);(3)局部变量区即栈(stack)区,存放局部变量;(4)自由存储区(free store),即动态存储区或堆(heap)区。
7.1.2 静态定义的变量和对象用标识符命名,称为(1);而动态建立的称为(2),动态建立对象的初始化是通过(3)实现(4)。
答案:(1)命名对象(2)无名对象(3)初始化式(initializer)(4)显式初始化7.1.3 在用new运算符建立一个三维数组15*30*10时,使用了(1)个下标运算符,对应的用delete运算符注销这个三维数组时使用了(2)个下标运算符。
new返回的指针是指向(3)的指针。
答案:(1)3个(2)1个(3)30行10列的2位数组7.1.4 当动态分配失败,系统采用(1)来表示发生了异常。
如果new返回的指针丢失,则所分配的自由存储区空间无法收回,称为(2)。
这部分空间必须在(3)才能找回,这是因为无名对象的生命期(4)。
答案:(1)返回一个空指针(NULL)(2)内存泄漏(3)重新启动计算机后(4)并不依赖于建立它的作用域7.1.5 按语义的默认复制构造函数和默认复制赋值操作符实现的复制称为(1),假设类对象obj中有一个数据成员为指针,并为这个指针动态分配一个堆对象,如用obj1按成员语义拷贝了一个对象obj2,则obj2对应指针指向(2)。
答案:(1)浅拷贝(2)同一个堆对象7.1.6 单链表的结点包含两个域:(1)和(2)。
使用链表的最大的优点是(3),即使是动态数组也做不到这一点。
答案:(1)数据域(2)指针域(3)用多少空间,开多少空间7.1.7 进入单链表必须通过单链表的(1),如果它丢失则(2),内存也(3),在单链表中进行的查找只能是(4)。
复习题1
A.友元函数的实现必须在类的内部定义
B.友元函数是类的成员函数
C.友元函数破坏了类的封装性和隐藏性
D.友元函数不能访问类的私有成员
(9)一个类的友元函数或友元类可以访问该类的()。
A.私有成员B.保护成员C.共有成员D.所有成员
(10)下列对静态数据成员的描述正确的是()。
}
下列主程序时的运行结果为___________。
void main()
{
MyCla a(33);
MyCla b(223,54);
{
MyCla c(38,84);
b.Display();
}
a.Display();
}
参考答案:
(1)公有成员,保护成员,私有成员,公有成员,数据成员
(2)构造函数
(3)当对象被撤销时,释放该对象所占据的存储空间。
执行析构函数:x=101y=0
执行析构函数:x=0y=0
执行两个参数构造函数:x=57y=28
执行设置函数:x=0y=0
执行设置函数:x=86y=0
执行显示函数:x=86y=0
执行设置函数:x=24y=75
执行显示函数:x=24y=75
执行析构函数:x=24y=75
执行一个参数构造函数:x=33y=0
class Box
{……};
void main()
{
Box A,B,C;
}
(15)下列程序的执行结果是___________。
#include<iostream.h>
class A
{
int a;
double b;
public:
类与对象作业1_2012_参考答案
类与对象作业1_2012_参考答案1.类的定义类的成员包括–数据成员与成员函数类定义的三种形式–声明与实现不分离,写在{}内–声明与实现分离,放在同⼀个⽂件中–声明与实现分离,放在两个⽂件中类声明:放在头⽂件中,命名:类名.h,包含:–数据成员的定义–成员函数的原型说明语句类实现:放在源程序⽂件中,命名:类名.cpp,包含:–成员函数的定义:要在每个成员函数的函数名前加:类名::–增加⽂件包含命令,包含类声明⽂件,如:#include”circle.h”2.类的使⽤编写main 函数–放在源程序⽂件中,命名:test.cpp–增加⽂件包含命令,包含类声明⽂件,如:#include”circle.h”–创建对象–测试各个成员函数,形式为对象名.公有成员函数名(实参表)类与对象1_2012_参考答案4-1.编写圆类Circle,包含:⼀个名为radius的double型数据成员,表⽰圆形的半径。
数据成员的获取函数getRadius和设置函数setRadius。
⼀个名为getArea()的函数,返回圆形的⾯积。
⼀个名为getPerimeter()的函数,返回圆形的周长编写⼀个测试程序,它创建2个Circle类对象,将第⼀个圆形的半径设置为2.5,第2个圆形的半径设置为3.5,并输出两个圆形对象的半径、⾯积和周长。
//以下为Circle类的声明部分:circle.hclass Circle{public:double getArea();double getPerimeter();double getRadius();void setRadius(double);private:double radius;};//以下为Circle类的实现部分: circle.cpp#include"circle.h"double Circle::getArea(){return 3.14*radius*radius;}double Circle::getPerimeter(){return 2*3.14*radius;}double Circle::getRadius(){return radius;}void Circle::setRadius(double r){radius=r;}//测试Circle类以下为test.cpp#include "circle.h"#includevoid main(){Circle a,b; //创建两个对象,对象名分别为a,b cout<<"radius="<cout<<"radius="<a.setRadius (2.5); //将a对象的radius成员设置为2.5b.setRadius (3.5); //将b的radius成员设置为3.5cout<cout<<"radius="<cout<<"area="<cout<<"perimeter="<cout<cout<<"radius="<cout<<"area="<cout<<"perimeter="<}4-2.编写圆柱体类Cylinder,包含:名为radius的double型数据成员,表⽰圆的半径,名为height的double型数据成员,表⽰⾼。
C程序设计题库及答案(精简)
【章节】第1章 C++基础知识【知识点】1、 C++程序的构成与书写形式;2、基本数据类型,常量、变量和表达式3、 C++的标准输入输出【单选题】1、在C++中,源程序变为可执行程序的正确顺序应该是( ) 。
A. 编辑、链接、编译、执行B. 编辑、编译、链接、执行C. 编译、编辑、链接、执行D. 编译、链接、编辑、执行答案:B2、要把高级语言编写的源程序转换为目标程序,需要使用( ) 。
A. 编辑程序B. 驱动程序C. 调试程序D. 编译程序答案:D3、下列关于C++与C语言的关系描述中,错误的是( ) 。
A. C语言是C++语言的一个子集B. C++与C语言是兼容的C. C++对C语言进行了一些改进D. C++和C语言都是面向对象的答案:D4、下面为使用面向对象语言的正确理由是( ) 。
A. 面向对象程序由三种基本结构组成,分别是顺序结构、选择结构和循环结构B. 程序语句比面向过程语言简单C. 面向对象程序设计可以设计为自行修改错误D. 面向对象程序很容易概念化答案:D5、以下选项中,合法的用户标识符是( ) 。
A. longB. _2TestC. 3DmaxD. A.dat答案:B6、下列描述中正确的是( ) 。
A. 不是每个C++程序都必须包含预处理命令#includeB. C++程序必须有return 语句C. C++程序中的变量必须定义在主程序内部D. C++程序中所使用的符号常量可以不进行定义答案:A7、C++源程序文件的扩展名为( ) 。
B. .CC. .DLLD. .EXE答案:A8、cout是I0流库预定义的( ) 。
A. 类B. 对象C. 包含文件D. 常量答案:B9、 C++对C语言作了很多改进,即从面向过程变成为面向对象的主要原因是( ) 。
A. 增加了一些新的运算符B. 允许函数重载,并允许设置缺省参数C. 规定函数说明符必须用原型D. 引进了类和对象的概念答案:D10、下列选项中,( ) 是不合法的标识符.A. ProgramB. Obj23C. doubleD. B_C_D答案:C11、下列标识符中,不合法的用户标识符为( ) 。
C++教程第07章 类与对象-1定义及使用初步C++教程第07章 类与对象-1定义及使用初步
第7章类与对象7-1. 教学目的与要求1.理解类、类的成员、类的对象等概念;并掌握类、类的成员的定义方法及类对象的创建方法;2.理解构造函数和析构函数的概念,掌握构造函数和析构函数定义方法,掌握构造函数的各种使用方法;3.理解对象成员的概念,掌握对象成员的初始化方法;4.掌握coust对象、 coust成员函数和coust成员数据的使用;5.掌握友元函数的定义和使用;7-2.主要内容及重点:本章主要介绍类的定义和使用以及类中各种特殊类型的成员的定义及用法,包括类及其成员的定义、对象的创建和使用、*this指针,成员函数、构造函数、析构函数、对象成员、友员、静态成员等。
类是面向对象系统中最重要要的概念,面向对象程序设计中的所有操作都可归结为对类的操作。
类是实现C++面向对象程序设计的基础,是软件开发方法发展的必然产物。
本章的重点是:类的定义和使用,以及各种类型的成员数据的定义和使用,各种类型的成员函数的定义和使用,构造函数和析构函数,友元函数等。
本章的难点是:构造函数的两类特殊用途、const对象和const成员、静态7-3. 第7章类与对象-课件3-4. 第7章类与对象-复习总结本章首先介绍了类和对象的基本概念和特性,使初学者对类有了一个总体的认识。
类是面向对象程序设计的基础。
在进行面向对象程序设计时,必须习惯于将事物或问题的描述抽象为类。
类是对某一类事物的描述。
类中包含了数据成员和成员函数。
它们表现了该类所具有的属性(数据)和操作(函数)。
类的一个实例称为对象。
对象是具有类类型的变量。
对象中的公有成员函数是对象与外界进行信息交换的唯一接口。
其次进一步学习了类中各种类型成员的定义及使用。
1.类的成员函数与一般函数一样,函数的参数可以具有默认值,并可以进行函数的重载。
但成员函数具有类的作用域,即只能通过类的对象访问其公有成员函数。
2.在创建对象时,自动调用类的构造函数,因此构造函数提供了对成员函数进行初始化的一种手段。
C++程序设计(第3版)第7章 类与对象
【例7.2】定义一个表示学生的类Student。 //类的实现部分 void Student::Set(string num1,string name1,char sex1) { num=num1; name=name1; sex=sex1; } void Student::Show() { cout<<setw(8)<<"num"<<setw(8)<<"name"<<setw(8)<<"sex"<<endl; cout<<setw(8)<<num<<setw(8)<<name<<setw(8); if(sex=='f'||sex=='F') cout<<"female"<<endl; else cout<<"male"<<endl; } return
7.2 对象的定义
7.2.1 对象的定义 7.2.2 对象对类成员的访问
return
7.2.1 对象的定义
类是对象的抽象,而对象是类的实例。 对象是类的某一特定实例,也就是该类类型的一个变量, 它一定属于某个已经定义的类。声明一个对象后,系统为 每个对象分配内存空间。 常用的对象定义方法: (1)先声明类类型,后定义对象 (2)在声明类的同时,直接定义对象 (3)在声明类时,不给出类名,直接定义对象。 在C++中,对于每一个对象,只为它的数据成员分配存储 空间,对于成员函数,只存储一个副本。
【例7.2】定义一个表示学生的类Student。 //类的说明部分 class Student {public: //公有成员函数 void Input(); void Set(string,string,char); void Show(); private: //私有数据成员 string num; //学号 string name; //姓名 char sex; //性别 }; //类的实现部分 void Student::Input() { cout<<"num="; cin>>num; cout<<"name="; cin>>name; cout<<"sex="; cin>>sex; }
第7章 类和对象 习题解答
public公有成员,既可以被本类中的成员函数所引用,也可以被类作用域外的其他函数引用。
protectd保护成员,不能被类外访问(与私有成员类似),但可以被派生类的成员函数访问。
关于私有、公有和保护的概念,例如:一个家庭的住宅,客厅一般是允许客人进入的(公有的),而卧室只允许家庭成员进入(私有的),祖传的珍宝则只能由家庭成员继承(保护的),一般不会外传。
类(class):类是对象的抽象,如可以把中国人、美国人、日本人等所有国家的人抽象为“人”类,再如,凡是有轮子、能滚动前进的陆地交通工具统称为“车”。抽象的过程就是将有关事物的共性归纳、集中的过程。
因此,类是对象的抽象,而对象则是类的特例或是类的具体表现。
温馨提醒:类是抽象的,不占用内存,而对象是具体的,占用存储空间。
}
};
如果在类的声明之外定义成员函数时,必须在函数名前面加上类名和作用域运算符“::”,予以限定。例如,若上面的display( )成员函数放在类声明之外定义,则应写成:
voidCRect::display(){//函数表明对数据的具体操作
cout<<"Circle="<<2*(right-left) + 2*(bottom-top)<<'\n';
温馨提醒:(1)类体声明中如果没有说明成员的属性,则默认为private;
(2)成员函数可以访问本类中的任何成员(包括私有、公有和保护的成员);
(3)成员函数与普通函数一样可以重载。
7.3.4类与结构体的对比
类与结构体的共同点:类的成员可以是成员数据,也可以是成员函数。同样经过C++功能的扩展后,结构体中也可以有成员数据和成员函数的存在。类中成员的定义可以有public,private,protected访问权限控制,同样在结构体定义中也可以有这些控制说明。
第7章 C#类 与 对 象
7.3.2 数据成员
类的数据成员包含字段、常量和事件。
1.字段。字段用于表示与对象或类相关联的变量,包括 静态字段、实例字段和只读字段。 见下例。 2.常量。常量与类的关联方式和变量与类的关联方式相 同。使用const关键字声明常量,如果它们声明为public, 就可以在类的外部访问。见下例。 3.事件。事件是类的成员,在类或对象发生某些行为 (例如用户的交互操作或者改变了类的某些字段或属性) 时,它可以让对象通知调用程序。客户端可以包含所谓 “事件处理程序”的代码来响应该事件。有关事件的详细 介绍可参见第9章。
7.3.4 构造函数和析构函数
class Car { private string description; private uint wheels; public Car(string description, uint wheels) { this.description = description; this.wheels = wheels; } public Car(string description) { this.description = description; this.wheels = 4; } }
7.1.2 面向对象编程的概念
面向对象编程的对象,即系统中用于描述客观事 物的一个实体,是构成系统的一个基本单位。 面向对象编程中的类,是具有相同数据成员和函 数成员的一组对象的集合,它为属于该类的全部 对象提供了抽象的描述。 面向对象编程的基本内容就是把数据和函数“封 装”到编程所必需的“对象”中,程序由一个个 能够起到子程序作用的对象(或单元)组合而成
abstract
sealed new
抽象
密封
该类不能生成实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//7.4-3分析下列程序的输出结果
c++ 第7章-类和对象2 习题
胡凤珠
7.1 判断题 指向常对象的指针 × 1.定义对象指针时也要调用构造函数。 const Date d1(2005,7,1); √ 2.对象指针可用同类对象的地址值给它赋值。 const Date *pd=&d1; × 3.对象指针成员表示与对象引用相同。 √ 4.常类型指针有两种,一种是指针的地址值是常量,另一种是指针 所指向的变量或对象是常量。 × 5.指向对象的常指针的地址值是可以改变的。 A a(7); × 6.指向常对象的指针所指向的对象是可以改变的。 √ 7.this指针是系统生成的指向当前被某个成员函数操作对象的指针。 const A &ra=a; × 8.对象引用可以用一个同类对象的地址值对它赋值。 × 9.定义对象引用时,可以对其引用进行初始化,也可以不进行初始 化。 × 10.对象数组的元素可以是不同类的对象。
17举例 #include <iostream.h> class C { public: C(int i) { c=i; } C() { c=0; cout<<"Default constructor called."<<c<<endl; ~C() { cout<<"Destructor called."<<c<<endl; } void Print() { cout<<c<<endl; } private: int c; }; void main() { C ss(9); C *p; // C *q=&ss; p=new C[4]; int n=1; for(int i=0;i<4;i++) p[i]=C(n++); for(i=0;i<4;i++) p[i].Print(); delete []p; delete &ss; // delete q; }
7.3
填空题 已知:class A{
public:A (int i) { a=i;} void print( ) { cont<<a<<endl; } private : int a;
}; 要求: 4.定义一个对象指针数组pa,它有5个元素,每个元素是类A对象指针,应 该是 A *pa[5]; 。 5.使用new创建一个堆对象,一个实参值为5,应该是 A *p; p=new A(5); 。
7.3
填空题 已知:class A{
public:A (int i) { a=i;} void print( ) { cont<<a<<endl; } private : int a;
}; 要求: 1.定义一个指向对象的常指针p,应该是 A *const p; 。 2.定义一个指向常对象指针p,应该是 const A *p; 。或者A const *p; 3.定义类A的含有5个元素的一维对象数组a,应该是 A a[5]; 。
)。
8.下列关于运算符delete的描述中,错误的是( B )。 A.使用该运算符可以释放用new运算符创建的对象或对象数组 B.使用该运算符可以释放所有对象 C.使用delete运算符时会自动调用析构函数 D.用它释放对象数组时,它作用的指针名前要加下标运算符[ ] 9.定义不同存储类对象时,必须要加的存储类说明符是( C )。 A.auto B.extern C.statie D.register 10.下列关于this的描述中,错误的是( D )。 A.this是一个由系统自动生成的指针 B.this指针是指向对象的 C.this指针在用对象引用成员函数时系统创建的 D.this指针只nt (*p)(); p为指向函数的指针变量,该函数返回一个整型值 7.2 单选题 1.f1()函数是类A的公有成员函数,p是指向类的成员函数f1()的指 针,下列表示中正确的是( C )。 A.p=f1() B.p=f1 C.p=A::f1 //函数名代表函数入口地址 D.p=A::f1() 2.p是指向类A数据成员a的指针,a是类A的一个对象。在给a成员赋 值为5的下列表达式中,正确的是( C )。 A.a.p=5 B.a->p=5 C.a.*p=5 D.*a.p=5 3.void Set(A &a);是类A中一个成员函数的说明,其中A&a的含义 是( A )。 A.类A的对象引用a作该函数的参数 B.类A的对象a的地址值作函数的参数 C.表达式变量A与变量a按位与作函数参数 D.指向类A对象指针a作函数参数
指向对象的常指针, Date d1,d2; Date *const pd=&d1;
× × √ × √ √ X × √ ×
11.对象指针数组可以使用不同类的对象的地址值进行初始化。 12.给对象数组元素赋值时都要创建临时对象。 13.指向一维对象数组的指针是一个二级指针。 14.自身类对象可作该类的子对象。 15.子对象的初始化要在构造函数的成员初始化列表中进行。 16.使用new运算符创建的对象称为堆对象。 17.任何对象都可以使用delete运算符来释放。 18.使用new运算符创建的对象数组其元素都具有默认值。 19.类的作用域范围指的是类体内。 20.对象的存储类只有外部的和静态的。
7.3
填空题 已知:class A{
public:A (int i) { a=i;} void print( ) { cont<<a<<endl; } private : int a;
}; 要求: 6.使用new创建一个对象数组,该数组用指针pa指向,并使数组的3个元素 都是类A的对象a1的值。应该是 A a1,*pa; pa=new A[3]; pa[0]=pa[1]=pa[2]=a1; 。 7.在某个函数体内定义一个静态类的对象sa,应该是 static A sa; 。 8.定义一个类A的对象a1,并给它赋值,其实参值为8,应该是 A a1(8); 。
4.已知:const A a;其中A是一个类名,指向常对象指针的表示为( B A.const * A pa; B.const A *pa; C.A * const pa; D.const *pa A; 5.下列关于子对象的描述中,错误的是( D )。 A.子对象不可以是自身类的对象 B.子对象是另一个类的对象 C.子对象的初始化要包含在构造函数中 D.一个类中只能有一个子对象 6.执行下列说明语句,其调用构造函数的次数为( A )。 A a[5],*p[2];(对象指针数组)其中,A是一个类名 A.5 B.6 C.7 D.10 7.下列关于运算符new的描述中,错误的是( D )。 A.它可以创建对象或变量 B.它可以创建对象数组或一般类型数组 C.用它创建对象或对象数组时要调用相应的构造函数 D.用它创建的对象可以不用delete运算符释放