C++第五章_类与对象习题解答

C++第五章_类与对象习题解答
C++第五章_类与对象习题解答

第五章类与对象习题

一.基本概念与基础知识自测题

填空题

引入类定义的关键字是(1)。类的成员函数通常指定为(2),类的数据成员通常指定为(3)。指定为(4)的类成员可以在类对象所在域中的任何位置访问它们。通常用类的(5)成员表示类的属性,用类的(6)成员表示类的操作。

答案:

(1)class

(2)公有的public

(3)私有的private

(4)公有的public

(5)数据

(6)/

(7)函数

类的访问限定符包括(1)、(2)和(3)。私有数据通常由(4)函数来访问(读和写)。这些函数统称为(5)。

答案:

(1)public(公有的)

(2)private(私有的)

(3)protected(保护的)

(4)公有的成员函数

(5)类的接口

通常在逻辑上,同一类的每个对象都有(1)代码区,用以存储成员函数。而在物理上通常只有(2)代码区。只有在(3)定义,并(4)的函数和加了关键字(5)的函数例外。

答案:

(1)?

(2)独立的

(3)共用的

(4)在类说明中

(5)不包括循环等复杂结构

(6)inline

C++中支持三种域:(1)、(2)、(3)。函数域被包括在(4)中,全局域被包括在(5)中。using指示符以关键字using开头,后面是关键字(6),最后是(7)。这样表示以后在该名字空间中所有成员都(8)。

如不使用using指示符则在使用时要加::,称为(9)运算符。

答案:

(1)局部域(local scope)

(2)名字空间域(namespace scope)

(3)类域(class scope)

(4)?

(5)局部域

(6)名字空间域

(7)namespace

(8)名字空间名

(9)可以直接被使用

(10)域

引用通常用作函数的(1)和(2)。对数组只能引用(3)不能引用(4)。

答案:

(1)参数

(2)返回值

(3))

(4)数组元素

(5)数组名本身

构造函数的任务是(1)和(2)。构造函数无(3),但并不表示(4)。类中可以有(5)个构造函数,它们由(6)区分。

如果类说明中没有给出构造函数,则C++编译器会(7)。拷贝构造函数的参数是(8),当程序没有给出拷贝构造函数时,系统会自动提供(9)支持,这样的拷贝构造函数中每个类成员(10)。

答案:

(1)建立对象(为对象分配内存)

(2)初始化数据成员

(3)函数返回类型说明

(4)没有返回值,返回的是构造函数所创建的对象

(5)多

(6)不同的参数表

(7)-

(8)自动给出一个缺省的构造函数

(9)同一类对象的引用

(10)缺省的拷贝构造函,称为缺省的按成员语义支持。

(11)被依次拷贝

一个类有(1)个析构函数。(2)时,系统会自动调用析构函数。

答案:

(1)一

(2)对象注销时

运算符重载时,其函数名由(1)构成。成员函数重载双目运算符时,左操作数是(2),右操作数是(3)。

答案:

(1)@

(2)关键字operator和该运算符

(3)对象

(4)该函数的参数

5.2简答题(以下习题题号可能和教材不一致!)

5.2.1为什么返回值为引用的函数可以作为左值

答:函数返回引用实际是指明(返回)了相应的关联变量,所以声明返回值为引用的函数实际上是将关联变量作为左值参与运算。

5.2.2什么是缺省的构造函数缺省的构造函数最多可以有多少个

&

答:如果在类定义中不显式地定义构造函数,C++编译器会自动产生一个缺省的构造函数,不过该函数不做具体的初始化工作。只要构造函数是无参的或者只要各参数均有缺省值的,C++编译器都认为是缺省的构造函数。缺省的构造函数只能有一个。

5.2.3拷贝构造函数用于哪三个方面

答:

(1)用类的一个对象去初始化该类的另一个对象时使用。

(2)当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。

(3)当函数的返回值是类对象,函数执行结束返回调用者时使用。

5.2.4所有类对象未重载的赋值运算符“=”是怎样工作的为什么它可以进行连续赋值答:对所有的类对象,未重载的赋值运算符“=”称作缺省的按成员拷贝赋值操作符,同类对象之间可以用“=”直接拷贝。因为缺省的赋值操作返回一个对象的引用,所以它可以进行连续赋值。

[

5.2.5为什么在友元函数的函数体内访问对象成员时,必须用对象名加运算符“.”再加对

象成员名

答:友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符“.”加对象成员名。这一点和一般函数一样。

5.2.6重载复数运算符+时,采用下面友元函数声明:

friend Complex operator+(Complex &c1,Complex &c2);

为什么不能用于“实数+复数”怎样改进才能适用为什么

答:使用引用类型变量作为运算符重载函数的参数,身为左值的实数类型实参不能被转换为复数,编译时无法通过。添加const说明,使实数到复数的转换隐式地在一份拷贝上进行,则可以实现“实数+复数”运算。修改后的说明为:

friend Complex operator+(constr Complex &c1, const Complex &c2);

5.2.7·

5.2.8C++中结构、联合与类三者间有何异同

答:在C++中结构(structure)与类几乎是完全一样的类型,差别仅仅在于缺省情况下结构的成员为公有的。联合(union)是C++的导出数据类型,在语法与功能上类似于结构,二者的区别是:结构变量的各成员同时被分配了各自独立的内存区,而联合变量的各个成员的存储开始地址都相同,所以在任一时刻联合变量只能存储一个成员。

二.编程与综合练习题

构造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成员包括设置日期时间和输出时间,其中年、月请用枚举类型,并完成测试。(包括用成员函

数和用普通函数)

解:本题要求仅是定义类的练习,并非实用的提供日期时间的程序。实用的日期时间程序见附录二的日期时间函数。

#include <>

#include <>

#include <>

enum YR{Y2000,Y2001,Y2002,Y2003,Y2004,Y2005};

`

Circumference=2*r*3.;

}

Circle::Circle(Circle & cl){

r=;

Area=;

Circumference=;

}

void Circle::SetR(double R){

r=R;

Area=r*r*3.;

Circumference=2*r*3.;

}

void main(){

Circle cl1(2),cl2,cl3=cl1;

cout<<"圆半径:"<<()<<'\t'<<"圆周长:"<<()

<<'\t'<<"圆面积:"<<()<

(4);

cout<<"圆半径:"<<()<<'\t'<<"圆周长:"<<()

<<'\t'<<"圆面积:"<<()<

.

}

5.4设计一个学校在册人员类(Person)。数据成员包括:身份证号(IdPerson),姓名(Name),

性别(Sex),生日(Birthday)和家庭住址(HomeAddress)。成员函数包括人员信息的录入和显示。还包括构造函数与拷贝构造函数。设计一个合适的初始值。

解:本题为指出构造函数等的调用,加了一些提示语句。

#include<>

#include<>

enum Tsex{mid,man,woman};

class Person{

char IdPerson[19];

假设某城市人人所得税的税基为2000元,而其征收个人所得税的规定如下:不超过税基免征税,按超过税基部分征收所得税。超过部分在2000元以下,征税5%;5000元以下,征

税10%;10000元以下,征税15%;10000元以上,征税20%。建立一个incomec类,共包含的数据成员和成员函数如下:

\

income数据成员,表示职工的实际收

wage静态数据成员,表示职工工资

taxrate静态数据成员,表示税率

setWage(double m)成员函数,设置工资值

getTaxrate()静态成员函数,计算税率

calIncome()静态成员函数,计算职工的实际收入

在主函数中,实例化不同的incomec类对象,并计算它们的实际收入。

#include

using namespace std;

class incomec

{

private:

float income;

static float wage;

static float taxrate;

public:

incomec()

{

income=0;

}

void setWage(double);

static float getTaxrate();

static void callcome();

};

float incomec::taxrate=;

float incomec::wage=3000;

void incomec::setWage(double w)

{

wage=w;

}

void incomec::callcome()

{

float all,super;

super=wage-2000;

all=2000+super*(1-getTaxrate());

cout<<"职工的实际工资为:"<

cout<

}

float incomec::getTaxrate() {

float left=wage-2000;

if(left<2000)

{

taxrate=;

}

else if(left<5000)

{

taxrate=;

}

else if(left<10000)

{

taxrate=;

}

else

{

taxrate=;

}

return taxrate;

}

void main()

{

incomec a1;

(20000);

();

incomec a2;

(20000);

cout<<"税率为:"<<()<

}

C语言的类和对象

C语言的类和对象 【类实现了C++面向对象程序设计的基础,我们使用类来定义对象的属性,类是 C++封装的基本单元。】 一、----- 类 使用关键字class创建类,一个类声明定义了一个连接代码和一个数据的新类型,这个新的类型又可以用来声明该类的对象。因此,类又是逻辑逻辑抽象概念,儿对象是物理存在的,也就是说对象是类的实例。 类的声明语法上和结构相似。 [一下是完整的类的形式] class class_name { private data and functions access_specifier: data and functions access_specifiter: data and functions //…….. access_specifier:是 data and functions }object_list; 其中,object_list是任选项,如过存在,他声明类的对象。access_specifier为下面的三个关键字之一: Public private protected 默认时,在类声明的函数和数据属于该类私有,只能被该类的成员访问。如果使用,pubilc访问限定符号,函数和程序就可以被其他部分访问。Protected访问限定符,仅在涉及继承的时候才需要(十五章了解)。访问限定符已经使用,其作用就保持到遇到别的访问限定符或者达到类声明的结束处。 在类声明内可以任意改变访问说明符号,对于某些声明,可以转换位public,然后再转换成private。 [如下所述] /******************************* ··构造函数和析构函数学习··· *******************************/ //Using a constructor and destructor. /******************************* 声明C++ 程序头文件 *******************************/ #include #include #include #include /******************************* ·名字空间:组织大型的程序结构·

C++实验报告 第四章 类与对象

C++实验报告 实验4 类与对象 一、实验目的 1、掌握类的声明和使用 2、掌握类的声明和对象的声明 3、复习具有不同访问属性的成员的访问方式 4、观察构造函数和析构函数的执行过程 5、学习类的组合使用方法 6、使用DEBUG调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序 二、实验任务 1、声明一个CPU类,包含等级rank、频率frequency、电压voltage等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU-Rank,声明为enum CPU-Rank{P1=1,P2,P3,P4,P5,P6,P7}, frequency为MHz的整数型,voltage为浮点型的电压值。观察构造函数好析构函数的调用顺序。 2、声明一个简单的Computer类,有数据成员芯片cpu、内存ram、光驱cdrom 等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM 类的一个对象,cdrom为CDROM类的一个对象,声明并实现这个类。 3、设计一个用于人事管理的People类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number编号、sex性别、birthday出生日期、id身份证号等。其中出生日期声明为一个日期类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内嵌成员函数、组合。 三、实验内容 任务1:首先声明枚举类型,在这里出现了知识性错误,不清楚具体应如何声明,经查询相关书籍,知道应在类外进行声明。初次用类来进行编程,在概念上是有一些混乱的,例如构造函数和析构函数的调用顺序等。在用debug单步调试后,明白其中道理。 源程序: //Lab4_1.cpp #include using namespace std; enum CPU_Rank {P1=1,P2,P3,P4,P5,P6,P7}; class CPU { //CPU类的定义 private: //私有数据成员 CPU_Rank rank; int frequency;

实验3 类和对象

实验3 类和对象的创建与使用 一、实验目的 1、掌握类的定义和对象的创建; 2、掌握构造方法的作用、格式及重载; 3、掌握修饰词对成员存取权限的限制。 4、掌握实例成员、类成员的定义和使用方法。 二、实验内容 1、定义储蓄账户类,并创建对象模拟银行基本操作。 2、两游戏角色决斗。给定二个不同的角色,判定交手的胜负关系。(选做) 3、设计学生类、学校类、录取类,根据学生成绩和学校分数线,判断是否录取。 三、实验步骤 说明:请将第1,3题代码写入实验报告实验步骤处。 1、模拟银行账户功能。 编写程序,模拟银行账户功能。要求如下: 属性:账号、姓名、地址、存款余额、最小余额。 方法:存款、取款、查询。 根据用户操作显示储户相关信息。 如存款操作后,显示储户原有余额、今日存款数额及最终存款余额。 取款时,若取款成功,显示信息提示;若最后余额小于最小余额,拒绝取款,并显示信息提示。具体显示信息可据方便性原则自拟。 public class AccountOperation { public static void main(String [] args) { Account account1=new Account("650101","柳眉","天河学院",800.00); Account account2=new Account("650102","郑杰","天河学院",200.00); account1.transfer(account1,account2,300.0); account1.deposit(300.5); account1.withdraw(200); account1.withdraw(300); account1.query(); System.out.println(account1.toString()); //System.out.println(https://www.360docs.net/doc/5d4023715.html,); error!! } } class Account { private String account; private String name; private String address; private double balance;

第10章类和对象

第10章 类和对象 本章工作任务 实现学校类,并描述学校的信息 实现教员类,并输出教员的信息 实现学生类,并输出学生的信息 本章技能目标 掌握类和对象的特征 理解封装 会创建和使用对象

使用Java理解程序逻辑 本章单词 请在预习时学会下列单词的含义和发音,并 填写在横线处。 1.class: 2.object: 3.OOP: 4.return: 5.encapsulation: 6.null: 7.initial: 8.type:

类和对象 本章简介 在前面章节中,我们学习了程序设计的基本知识和流程控制语句。通过这些内容的学习,大家能够用Java语言进行程序设计,但这些程序的规模都很小,一般只有几十行代码。假设我们要编程解决一个很大的问题,需要写几万行代码,如果按照以前的做法,将这些代码都放在一个Java文件中,可以想象这个文件会非常冗长,而且很难维护。 因此,在下面的课程中,你将看到Java程序设计的另一道风景——面向对象程序设计,英语缩写为OOP。面向对象程序设计是一个里程碑,Alan Kay因为设计了世界上第一个面向对象语言Smalltalk而获得图灵奖。Java之父James Gosling结合Internet背景设计了完全面向对象的Java语言。本章将带领你进入面向对象的世界,学习什么是对象和类,以及如何创建和使用类的对象。 10.1 对象 首先问你一个问题,“世界是由什么组成的?”。如果你是一个化学家,你可能会说,“世界是由分子、原子、离子等这些化学物质组成的”。如果你是一个画家,你可能会说,“世界是由不同的颜色组成的”。不同的人会有不同的回答。但如果你是一个分类学家,你会说,“这个世界是由不同类别的事物组成的”,如图10.1所示。 图10.1 世界的组成 其实,这个问题本身就比较抽象,我们说物以类聚,所以可以说世界是由不同类别的事物构成,如图10.1中所示,世界由动物、植物、物品、人和名胜等组成。动物可以分为脊椎动物和无脊椎动物。脊椎动物又可以分为哺乳类、鱼类、爬行类、鸟类和两栖类。 爬行类又可以分为有足类和无足类……,就这样可以继续分下去。当我们提到某一个分类时,就可以找到属于该分类的一个具体的事物。比如乌龟就属于爬行类中的有足类,

类和对象练习题

类和对象 一、选择题 1、下面对方法的作用描述不正确的是:( d ) A、使程序结构清晰 B、功能复用 C、代码简洁 D、重复代码 2、方法定义的变量:( b ) A 、一定在方法所有位置可见B、可能在方法的局部位置可见 C、在方法外可以使用 D、在方法外可见 3、方法的形参:(a) A、可以没有 B、至少有一个 C、必须定义多个形参 D、只能是简单变量 4、方法的调用:(c) A、必须是一条完整的语句 B、只能是一个表达式 C、可能是语句,也可能是表达式 D、必须提供实际参数 5、return 语句:( d) A、不能用来返回对象 B、只可以返回数值 C、方法都必须含有 D、一个方法中可以有多个return 语句 6、void 的含义:(d) A、方法体为空 B、方法体没有意义 C、定义方法时必须使用 D、方法没有返回值 7、main()方法的返回类型是:( c ) A 、boolean B、int C、void D、static 8、方法重载所涉及的方法:( a ) A、有相同的名字 B、参数个数必须不同 C、参数类型必须不同 D、返回类型必须不同 9、下面关于类和对象之间关系的描述,正确的是( c ) A、联接关系B、包含关系C、具体与抽象的关系D、类是对象的具体化 10、下面关于java中类的说法哪个是不正确的( c ) A、类体中只能有变量定义和成员方法的定义,不能有其他语句。 B、构造方法是类中的特殊方法。 C、类一定要声明为public的,才可以执行。

D、一个java文件中可以有多个class定义。 11、下列哪个类声明是正确的( d) A、public void H1{…} B 、public class Move(){…} C、public class void number{} D、public class Car{…} 12、下面的方法声明中,哪个是正确的(c) A、public class methodName(){} B、public void int methodName(){} C、public void methodName(){} D、public void methodName{} 13、下述哪些说法是不正确的?( b ) A、实例变量是类的成员变量 B、实例变量是用static关键字声明的 C、方法变量在方法执行时创建 D、方法变量在使用之前必须初始化 14、下面对构造方法的描述不正确是( b)。 A、系统提供默认的构造方法 B、构造方法可以有参数,所以也可以有返回值 C、构造方法可以重载 D、构造方法可以设置参数 15、定义类头时,不可能用到的关键字是( b)。 A、class B、private C、extends D、public 16、下列类头定义中,错误的是( )。 A、public x extends y {...} B、public class x extends y {...} C、class x extends y implements y1 {...} D、class x {...} 17、设A为已定义的类名,下列声明A类的对象a的语句中正确的是( ) 。 A、float A a; B、public A a=A( ); C、A a=new int( ); D、static A a=new A( ); 18、设i , j为类X中定义的int型变量名,下列X类的构造方法中不正确的是( a )。 A、void X(int k ){ i=k; } B、X(int k ){ i=k; } C、X(int m, int n ){ i=m; j=n; } D、X( ){i=0;j=0; } 19、有一个类A,以下为其构造方法的声明,其中正确的是

C++实验九类和对象的使用实验报告

实验九类和对象的使用实验报告 一实验目的 1、学会用构造函数对类对象进行初始化 2、掌握析构函数,并了解构造函数和析构函数的调用顺序 3、了解对象数组和对象指针的用法 4、学会共用数据的保护,了解常对象、常成员函数等的使用限制 二实验内容和要求 1.回顾课本知识,掌握重点和难点,认真分析例题熟悉本章内容。 2.完成本章课后习题2、6、7题,认真分析每一题的代码。 三实验环境 Visual C++6.0开发环境 四源程序 2、 #include using namespace std; class Date { public: Date(int,int,int); Date(int,int); Date(int); Date(); void display(); private: int month; int day; int year; }; Date::Date(intm,intd,int y):month(m),day(d),year(y) {} Date::Date(intm,int d):month(m),day(d) {year=2005;} Date::Date(int m):month(m) { day=1; year=2005; }

Date::Date() { month=1; day=1; year=2005; } void Date::display() { cout< using namespace std; class Student { public: Student(intn,float s):num(n),score(s) {}; void change(intn,float s) { num=n; score=s; } void display() { cout<

C++类和对象实验报告

计算机科学与技术实验报告 实验二类和对象(1) 姓名:易XX 班级:计科二班学号:2015110121 实验目的:深入理解类和对象,学会定义类,申明私有、公有变量,学会定义对象,并调用成员函数,解决实际问题。 实验内容: (一)、题目要求: 定义一个描述角度的类CAngle,包含的内容如下: (1)私有成员变量value,表示角度,类型为double; (2)公有成员变量SetValue,实现功能是使用形参为value赋值。 声明为:viod SetValue(double); (3)公有成员函数GetCos,实现功能计算余弦值,并作为返回值返回。 声明为 double GetCos(); 编程实现如下功能:定义一个Cangle类的对象deg,调用成员函数设置deg的角度为30度,调用成员函数计算并输出deg的余弦值。 代码: #include #include using namespace std; #define PI 3.1415 //定义宏常量PI class CAngle{ double value; //定义角度 public: void Setvalue(double x){ value =x/180*PI; //把角度转化为弧度 } double Getcos(){ return ( cos(value) ); //计算cos值 } }; int main(){ CAngle deg; //定义一个Cangle类的对象deg deg.Setvalue(30); cout<

C上机实验报告实验四

实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 4.使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 5.在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,在成员函数中,构造函数用来初始化所有数据成员;display()中使用cout显示

《面向对象程序设计》第10章在线测试

《面向对象程序设计》第10章在线测试 A B C D 、关于异常对象的说法正确的是( A B 对象 C、以引用方式传递异常对象时,抛出的是局部静态对象 D 对象 A块相当于一个以类型为单一参数的函数 B 以捕捉 C块中可以声明变量,该变量可以在块外使用 D 数值 A B C D 、为保证程序中的全局变量不与开发商提供的全局变量重名,可以采取的措施是( A B C D

C、C++程序绝对不能出现错误 D、异常处理使C++程序在出现错误的情况下仍能继续运行 2、下面说法正确的是() A、C++程序中可以存在多个名字空间 B、不同的名字空间中不能出现名字相同的变量 C、名字空间能避免名字冲突 D、C++程序中也可以不定义名字空间 3、关于异常处理的说法正确的是() A、将异常的检测与处理分离 B、异常就是错误 C、异常由函数调用引起 D、在上层调用函数中使用try检测函数调用是否引发异常 4、下面与异常处理相关的关键字有() A、Throw B、throw C、try D、Try 5、下面的说法正确的是() A、引发异常用关键字throw B、在被调用函数中检测到异常条件用throw都可以引发异常 C、被调用函数只有在try块中用throw才可以引发异常 D、检测到的异常由catch捕获并处理 第三题、判断题(每题1分,5道题共5分) 1、抛出异常的模块并不负责异常的处理,该异常的处理可以程序中的任何位置。

正确错误、异常处理器根据抛出异常模块的报告来处理异常。 正确错误、异常信号传递方式有三种:传值方式、引用方式和指针方式。 正确错误表示函数将会抛出所有类型的异常 正确错误处理程序的出现次序无关紧要。 正确错误

实验一.类与对象实验报告

浙江理工大学信息学院 面向对象程序设计实验报告 实验名称:类的定义与使用学时安排:3 实验类别:设计性实验实验要求:1人1组姓名:邵旸珂学号:2016329621068  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的 1)掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性; 2)掌握类对象的定义; 3)理解类的成员的访问控制的含义,公有、私有和保护成员的区别; 4)掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数; 二、实验原理介绍 通过建立类及对象,用类的成员函数和对象访问类的成员; 利用建立类的构造函数,完成类的成员的初始化工作; 三、实验设备介绍 软件需求: windows或linux下的c++编译器 硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU

处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。 四、实验内容 编写一个程序,模拟电梯的功能。功能接口包括电梯上行按钮、下行按钮、楼层选择和电梯在行驶过程中的楼层显示。 要求: 1.由用户选择按上行按钮还是下行按钮,选择操作后再由用户输入要进入的楼层,进而电梯开始运行,显示所到的每一楼层层数。 2.如果是上行,则选择输入的楼层号不能比当前楼层号小,否则应给出不合法提示。 3. 如果是下行,则选择输入的楼层号不能比当前楼层号大,否则应给出不合法提示。 4.电梯一旦开始运作就会始终运行,直到窗口关闭。 5.电梯在经过不同楼层时,最好每个楼层的显示之间能有延迟,最终停靠的楼层的输出形式能更加醒目。如果可以,在电梯最初开始运行时,能在电梯由内部显示当前日期(提示:实现这些功能时,需要调用系统api,实现时间显示功能可以使用CDate类)。 五程序清单 #include #include #include using namespace std;

C++语言程序设计实验答案_类与对象

实验04 类与对象(6学时) (第4章类与对象) 一、实验目的 二、实验任务 4_1 声明一个CPU类。 包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,声明为enum CPU_Rank{ P1=1, P2, P3, P4, P5, P6, P7 }; frequency为单位是MHz的整型数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。 4_2 声明一个简单的Computer类。 有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等,有两个公有成员函数run和stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,声明并实现这个类。 4_3 声明一个表示时间的结构体。 可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。

4_4(习题4-10)设计一个用于人事管理的People(人员)类。 考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号),sex(性别)、birthday(出生日期)、id(身份证号)等。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现人员信息的录入和显示。要求包括:构造函数和析构函数、内联成员函数、组合。 三、实验步骤 1.(验证)声明一个CPU类,观察构造函数和析构函数的调用顺序。 首先声明枚举类型CPU_Rank,例如enum CPU_Rank{ P1=1, P2, P3, P4, P5, P6, P7 },再声明CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,声明成员函数run和stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示顺序。在主程序中声明一个CPU的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。程序名:。(程序见步骤2) ★程序的运行结果: 2.(示例)调试程序文件。 使用调试功能观察程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。参考程序如下: 操作)调试操作步骤如下: (1)单击“调试 | 逐语句”命令,系统进行单步执行状态,程序开始运行,一个DOS 窗口出现,此时Visual Studio中光标停在main()函数的入口处。

第10章 面向对象设计

第10章面向对象设计 10.1 软件模块之间的依赖性可以从哪些角度和抽象层次进行分析? 在面向对象软件中,常见的软件模块有类、接口、包、构件。因此,分析软件模块之间的依赖性就可以从类、接口、包和构件的角度和层次进行分析。 10.2 消除包之间循环依赖性的方法是什么? 本质上,两个包之间的依赖性来自于两个包中类之间的依赖性。类之间的循环依赖性是个特别棘手的问题,好在大多数情况下可以通过重新设计避免循环依赖性。具体方法是增加新包。举例说明如下: 在下图中,包A依赖于包B,反过来包B又依赖包A,构成了循环依赖。具体解决办法是:将包B依赖的包A中的元素从包A中分离出来,组成包C,使得包B不再依赖包A,而是依赖包C。 10.3 请给出构件的一般性定义,然后给出传统的软件工程环境及面向对象的软件工程环境中构件的定义,最后选择你熟悉的编程语言说明怎样定义一个构件。 软件构件是一种组装单元,它具有规范的接口规格说明和显式的语境依赖。软件构件可以被独立部署,并由第三方任意组装。OMG UML规范中将构件定义为“系统中某一定型化的、可配置的和可替换的部件,该部件封装了实现并暴露一系列接口”。 在传统的软件工程环境中,一个构件就是程序的一个功能要素,程序由处理逻辑和实现处理逻辑所需的内部数据结构以及能够保证构件被调用和实现数据传递的接口构成。传统的构件也称为模块,是软件体系结构的一部分。 在面向对象的软件工程环境中,面向对象技术已达到了类级复用,而构件级复用则是比类级复用更高一级的复用,它是对一组类的组合进行封装(当然,在某些情况下,一个构件可能只包含一个单独的类),并代表完成一个或多个功能的特定服务,也为用户提供了多个接口。一个构件可以是一个编译的类,可以是一组编译的类,也可以是其他独立的部署单元,如一个文本文件、一个图片、一个数据文件、一个脚本等。 选择你熟悉的编程语言说明怎样定义一个构件。(略) 10.4 典型的面向对象设计模型在逻辑上由哪几部分组成?对每一部分进行设计时所包含的主要内容是什么? 典型的面向对象设计模型在逻辑上将系统划分为4个部分,分别是问题域部分、人机交互部分、任务管理部分及数据管理部分。

实验一 类和对象

实验一类和对象 Visual C++ 6.0集成开发环境的使用: Visual C++系列产品是微软公司推出的一款优秀的C++集成开发环境,其产品定位为Windows 95/98、NT、2000 系列Win32 系统程序开发,由于其良好的界面和可操作性,被广泛应用。由于2000 年以后,微软全面转向.NET 平台,Visual C++6.0 成为支持标准C/C++规范的最后版本。 1.启动 安装完系统后,可以选择如下两种方式启动 1) 点击Windows “开始”菜单,选择“程序”菜单下“Microsoft Visual Studio 6.0”子菜单下的快捷方式Microsoft Visual C++ 6.0 启动Visual C++ 6.0。 2) 点击Windows “开始”菜单,选择“运行”,输入msdev,即可启动。启动后的界面如下: 图 1 启动界面 2.建立工程

选择“File”菜单下的“New”菜单项或直接按Ctrl+N,启动新建向导,如图2 所示: 图 2 新建向导 选择在“Projects”属性页选择Win32 Console Application,在Project Name 中输入项目名称demo,在Location 中选择项目文件,如图2 中c:\test\demo,项目所有文件将保存在此文件。输入完毕,单击确定按钮,进入下一界面如图3:

图 3 项目类型向导 在图 3 所示界面中选择a simple application,然后点击Finish 按钮,系统显示图4 所示界面。如果想退回上一步可以选择“Back”按钮。 图 4 项目信息 在图 4 中选择OK 按钮,系统完成项目的创建,并保存项目相关的信息。项目的目录结构如图5 所示。 1) Demo.dsw 是项目工作区文件,双击此文件,即可打开此项目; 2) Demo.dsp 为项目文件; 3) demo.cpp 是项目中的一个源程序;stdafx.h 和stdafx.cpp 为自动创建的源程序,一般不用修改。 图 5 目录结构

从C到ObjectiveC类和对象续修订稿

从C到O b j e c t i v e C类 和对象续 集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-

从 C++ 到 Objective-C(4):类和对象(续) 作者:日期: 2011 年 03 月 19 日(9) 方法 Objective-C 中的方法与 C++ 的函数在语法方面风格迥异。下面,我们就来讲述 Objective-C 的方法。 原型、调用、实例方法和类方法 以–开头的是实例方法(多数情况下都应该是实例方法); 以 + 开头的是类方法(相当于 C++ 里面的 static 函数)。 Objective-C 的方法都是 public 的; 返回值和参数的类型都需要用小括号括起来; 参数之间使用冒号:分隔; 参数可以与一个标签 label 关联起来,所谓标签,就是在 : 之前的一个名字。标签被认为是方法名字的一部分。这使得方法 比函数更易读。事实上,我们应该始终使用标签。注意,第一个 参数没有标签,通常它的标签就是指的方法名; 方法名可以与属性名相同,这使 getter 方法变得很简单。 C++ // 原型 void Array::insertObject(void*anObject, unsigned int atIndex); // shelf 是 Array 类的一个实例,book 是一个对象

shelf.insertObject(book, 2); Objective-C(不带 label,即直接从 C++ 翻译来) // 方法原型 // 方法名字是“insertObject::” // 这里的冒号:用来分隔参数,成为方法名的一部分(注意,这不同于C++ 的域指示符::) -(void) insertObject:(id)anObject:(unsigned int)index // shelf 是 Array 类的一个实例,book 是一个对象 [shelf insertObject:book:2]; Objective-C(带有 label) // 方法原型。“index” 有一个标签“atIndex” // 方法名为“insertObject:atIndex:” // 这样的话,调用语句就很容易阅读了 -(void) insertObject:(id)anObject atIndex:(unsigned int)index // shelf 是 Array 类的一个实例,book 是一个对象 [shelf insertObject:book:2]; // 错误! [shelf insertObject:book atIndex:2]; // 正确 注意,方括号语法不应该读作“调用 shelf 对象的 insertObject 方法”,而应该是“向 shelf 对象发送一个 insertObject 消息”。这是Objective-C 的实现方式。你可以向任何对象发送任何消息。如果目标对象不能处理这个消息,它就会将消息忽略(这会引发一个异常,但不

c类和对象练习题

c类和对象练习题 Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#

第8章类与对象 8.1知识要点 1.掌握类与对象的概念和定义方法,掌握类成员的访问属性。 2.掌握构造函数的概念、定义方法和使用方法。 3.掌握析构函数的概念、定义方法和使用方法。 4.掌握拷贝构造函数的概念、定义方法和使用方法。 5.掌握包含对象成员的类构造函数的定义方法。 6.掌握静态成员的概念、定义方法、作用和特点。 7.掌握友元的概念、定义方法、作用和特点。 8.掌握类模板的定义格式与使用方法。 8.2典型例题分析与解答 例题1:下列有关类的说法不正确的是()。 A.对象是类的一个实例 B.任何一个对象只能属于一个具体的类 C.一个类只能有一个对象 D.类与对象的关系和数据类型与变量的关系相似 答案:C 分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。 例题2:下面()项是对构造函数和析构函数的正确定义。 A.void X::X(), void X::~X() B.X::X(参数),X::~X() C.X::X(参数),X::~X(参数) D.void X::X(参数),void X::~X(参数) 答案:B 分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。 例题3:()的功能是对象进行初始化。 A.析构函数B. 数据成员 C.构造函数 D.静态成员函数 答案:C 分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作; 例题4:下列表达方式正确的是()。 A.class P{B.class P{ public: public: int x=15; int x; voidshow(){cout<

c++类和对象实验报告

实验一类和对象 实验课程名:面向对象程序设计(C++) 专业班级:学号:姓名: 实验时间:实验地点:指导教师: 一、实验目的和要求 (1) 理解类和对象的概念,掌握声明类和定义对象的方法。 (2) 掌握构造函数和析构函数的实现方法。 (3) 初步掌握使用类和对象编制C++程序。 (4) 掌握对象数组、对象指针和string类的使用方法。 (5) 掌握使用对象、对象指针和对象引用作为函数参数的方法。 (6) 掌握类对象作为成员的使用方法。 (7) 掌握静态数据成员和静态成员函数的使用方法。 (8) 理解友元的概念和掌握友元的使用方法。 二、实验内容 1.设计一个静态数组存储结构的顺序表类,要 求编程实现如下任务:建立一个线性表,首先 依次输人数据元素1,2,3,…,10,然后删除 数据元素6,最后依次显示当前线性表中的数 据元素。要求采用顺序表实现,假设该顺序表 的数据元素个数在最坏情况下不会超过50个。实验代码:#include using namespace std; const int MaxSize=100; //100只是示例性的数据,可根据实际问题具体定义 template //定义模板类SeqList class SeqList { public:

SeqList( ) {length=0;} //无参构造函数 SeqList(T a[ ], int n); //有参构造函数 ~SeqList( ) { } //析构函数为空 int Length( ) {return length;} //求线性表的长度 T Get(int i); //按位查找,取线性表的第i个元素 int Locate(T x ); //按值查找,求线性表中值为x的元素序号 void Insert(int i, T x); //在线性表中第i个位置插入值为x的元素 T Delete(int i); //删除线性表的第i个元素 void PrintList( ); //遍历线性表,按序号依次输出各元素 private: T data[MaxSize]; //存放数据元素的数组 int length; //线性表的长度 }; template SeqList::SeqList(T a[ ], int n) { int i; if (n>MaxSize) throw "参数非法";

类与对象答案

类与对象 知识要点 1.掌握类与对象的概念和定义方法,掌握类成员的访问属性。 2.掌握构造函数的概念、定义方法和使用方法。 3.掌握析构函数的概念、定义方法和使用方法。 4.掌握拷贝构造函数的概念、定义方法和使用方法。 5.掌握包含对象成员的类构造函数的定义方法。 6.掌握静态成员的概念、定义方法、作用和特点。 7.掌握友元的概念、定义方法、作用和特点。 8.掌握类模板的定义格式与使用方法。 典型例题分析与解答 例题1:下列有关类的说法不正确的是()。 A.对象是类的一个实例 B.任何一个对象只能属于一个具体的类 C.一个类只能有一个对象 D.类与对象的关系和数据类型与变量的关系相似 答案:C 分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。 例题2:下面()项是对构造函数和析构函数的正确定义。 A.void X::X(), void X::~X() B.X::X(参数), X::~X() C.X::X(参数), X::~X(参数) D.void X::X(参数), void X::~X(参数) 答案:B 分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。 例题3:()的功能是对象进行初始化。 A.析构函数 B. 数据成员 C.构造函数 D.静态成员函数 答案:C 分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作; 例题4:下列表达方式正确的是()。 A.class P{ B. class P{ public: public: int x=15; int x; void show(){cout<

实验报告4类与对象

实验名称:类与对象 一.实验目的: (1)理解C#语言是如何体现面向对象编程基本思想; (2)掌握类对象的定义; (3)了解类的封装方法,以及如何创建类和对象; (4)了解成员变量和成员方法的特性; (5)掌握静态成员的用法; (6)掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数; (7)掌握参数传递的用法; (8)掌握属性的作用和使用。 二.上机内容: 1)创建MyDataTime类,熟悉构造函数、析构函数的定义方法、属性的定义方法以及一般方法的定义过程。 (2)创建Fraction类,掌握运算符重载、静态方法的使用及其与实例方法的区别。(3)创建Swap类,掌握C#方法中参数的传递。 (4)整理上机步骤,总结经验和体会。 (4)完成实验报告。 四.上机步骤: 类的创建与应用: 创建一个MyDataTime类,要求如下: (1)私有字段:year,month,day; (2)属性:Year,Month,Day。注意在定义Month和Day的settor时要检验设置值的有效性,其中,,同时在对Day进行设置的时候要注意闰年和平 年的2月的天数。 (3)方法:构造函数:根据需求确定不同参数列表的构造方法。 析构函数:提示析构对象。 PrintMyDataTime:以“2011/4/24”、“2011年4月24日”、“2011.4.24”、“二〇一一年四月二十四日”的形式输出Year,Month和Day。 using System; using ; namespace ConsoleApplication1 { class MyDataTime { private int year; public int Year { set { year = value; } get { return year; }

实验四-类与对象

实验四类与对象 1.实验目的 1、使用类来封装对象的属性和行为; 2、掌握对象的组合以及参数传递; 3、掌握类变量与实例变量,以及类方法与实例方法的区别 2.实验内容 1、参考教科书,完成下面实验: 1)实验1 Tank类 2)实验2 计算机与光盘 3)实验3 家族的姓氏 4)实验4 三角形、梯形和圆形的类封装 5)实验5 实例成员与类成员 2、完成习题: 1)根据要求修改实验1,改进speedUP方法,使得Tank类的对象加速时不能将speed值超过220;增加一个刹车方法:void brake(),Tank类的对象调用它能将speed的值变成0。 2)根据要求修改实验2,主类中再增加一个CD的对象,然后将计算机中的数据(data数组)复制到CD对象中。 3、提高题 编写储蓄账户类及测试类,模拟存款,参考以下运行方式: (1)新开5个储蓄账户,各储蓄账户的编号、户名在新开储蓄账户时初始化,假设每位用户新开储蓄账户时都存入了一笔钱。 (2)提示用户从键盘输入储蓄账户编号。 (3)若输入的储蓄账户编号与新开的5个储蓄账户编号之一匹配,则提示用户从键盘输入存款金额,存款金额必须大于0,否则显示错误提示,直到用户输入的存款金额大于0为止。 (4)相应储蓄账户的余额被更新。 (5)存款完成后,提示存款成功,显示该储蓄账户的编号、户名、余额。 (6)若输入的储蓄账户编号与新开的5个储蓄账户编号均无法匹配,显示错误提示,并询问是否还要继续存款。 (7)用户输入yes,继续执行步骤(2),否则显示退出信息。 最基本要求:绘制UML类图;储蓄账户的余额必须确保大于等于0。 3.实验步骤 参考教材中相关的实验。 4.评分标准

相关文档
最新文档