第四讲第四讲类和对象类和对象(3)

程序设计实习(I): C++程序设计序设计实(I)C序设计

第四讲类和对象(3)

成员初始化列表CClass::CClass(){

x=0;

y=1;

}

()(),y(){

CClass::CClass():x(0), y(1){

} //成员初始化列表

?以下情况是必须:

?包含另一个类的成员

?成员是一个常量或是引用

4

class CMember{public:

CMember(int x){...} //显式声明构造函数,如果没有整数初始化

//则无法创建CMember 的一个实例

};

CMember* pm = new CMember; // Error CMember*pm =new CMember(2);CMember pm = new CMember(2); //OK

如果CMember 是另一个类的成员,如果要初始化,必须使用成员初始化列表

class CMyClass{

CMember m_member;public:

CMyClass();

}

CMyClass::CMyClass():m_member(2){5

...}

回顾及内容提要

?主要概念

类对象成员变量?语法细节

引用成员函数的写法?

类、对象、成员变量、成员函数

?引用、成员函数的写法?函数重载、缺省参数?对象的访问权限、友元?成员对象和封闭类?构造函数(复制构造函数)?析构函数、调用时机?const 成员和引用成员?常量对象和常量方法?

静态成员

?

this 指针

6

转换构造函数

?定义转换构造函数的目的是实现类型的自动转换?只有一个参数,而且不是复制构造函数的构造函数,一般就可以看作是转换构造函数

数一般就可以看作是

?当需要的时候,编译系统会自动调用转换构造函数,建立一个无名的临时对象(或临时变量)

7

class Complex {

p g

public: float real, imag;

Complex( double f ) {

cout << "FloatConstructor called" << endl;

real = f ; imag = 0;

}

Complex( int i = 0 ) {

C l(i t i0){

cout << "IntConstructor called" << endl;

real=i;imag=0;

real = i; imag = 0;

}

~Complex() {

~Complex(){

cout << "Destructor called" << endl;

}

};

8

Complex c1 ; // Complex(0) c1 = {0, 0};

Complex c2 = 2; // Complex(2) c2= {2, 0}; Complex c2=2;//Complex(2)c2={20};

Complex c3 = 2.5; // Complex(2.5) c3 = {2.5, 0};

int main ()()

{

cout << "c1=" << c1.real << "+" << c1.imag << "i"

<< endl;

cout << "c2=" << c2.real << "+" << c2.imag << "i"

<< endl;

<

cout << "in main" << endl;

;转,时象c1 = 4; //调用转换构造函数,生成临时对象

Complex c4[2]={4, Complex(10)};

cout << "end main" << endl;

return 0;

}

9

输出:

IntConstructor called

IntConstructor called

FloatConstructor called

c1=0+0i

10+0i

c2=2+0i

in main

in main

IntConstructor called //调用转换构造函数

Destructor called // 临时对象消亡

IntConstructor called

IntConstructor called

end main

end main

Destructor called

Destructor called

Destructor called

Destructor called

Destructor called

Destructor called

10

Complex c1 ; // Complex(0) c1 = {0, 0};

Complex c2 = 2; // Complex(2) c2= {2, 0}; Complex c2=2;//Complex(2)c2={20};

Complex c3 = 2.5; // Complex(2.5) c3 = {2.5, 0};

int main ()()

{

cout << "c1=" << c1.real << "+" << c1.imag << "i"

<< endl;

cout << "c2=" << c2.real << "+" << c2.imag << "i"

<< endl;

<

cout << "in main" << endl;

p;时象

Complex c = 4; //不生成临时对象

Complex c4[2]={4, Complex(10)};

cout << "end main" << endl;

return 0;

}

11

输出:

IntConstructor called

IntConstructor called

FloatConstructor called

c1=0+0i

10+0i

c2=2+0i

in main

in main

IntConstructor called

IntConstructor called

IntConstructor called

end main

Destructor called

Destructor called

Destructor called

Destructor called

Destructor called

Destructor called

Destructor called

Destructor called

12

1) 定义常量

)常

const int MAX_V AL = 23;

const string SCHOOL_NAME = “Peking University”;

2) 在指针定义上,则不能通过该指针修改其指向的地方的内容

int n, m;

const int * p = & n;

* p = 5; //编译出错

n = 4; //ok

p = &m; //ok

注意:不能把常量指针赋值给非常量指针,反过来可以

注意不能把常量指针赋值给非常量指针反过来可以const int * p1; int * p2;

p1 p2; //ok

p1=p2;

p2 = p1; //error

p2 = (int * ) p1; //ok

13

如果不希望在函数内部不小写了改变参数指针所指地方的 如果不希望在函数内部不小心写了改变参数指针所指地方的内容的语句,那么就可以使用常数指针参数

void MyPrintf( const char * p )

{

strcpy( p, "this"); //编译出错

strcp(p"this");

cout<

}

3) 用在引用上

int n;

const int & r = n;

r = 5; //error

n = 4; //ok

14

如果不希望某个对象的值被改变则定义该对象的时候可以常量对象和常量方法

如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加const 关键字

class Sample {

private :

int value;int value;public:

void SetValue() {vo d Se V ue(){}

};

常对象

const Sample Obj; // 常量对象Obj.SetValue (); //错误!常量对象只能使用构造函数、析构函const 数和有const 说明的函数(常量方法)

15

?在类的成员函数说明后面可以加const关键字,则该成员函数成为常量成员函数

?常量成员函数内部不能改变属性的值,也不能调用非常量成员函数

class Sample {

l S l{

private :

int value;

int value;

public:

void func() { };

void SetValue() const{

value = 0; // wrong

func(); //wrong

f()//

}

};};

const Sample Obj;

Obj.SetValue (); //常量对象上可以使用常量成员函数16

定义常量成员函数和声明常量成员函数时都应该使用const 关键字

class Sample {

class Sample{

private :

int value;;

public:

void SetValue() const;

};

void Sample::SetValue() const{ //此处不使用const会

//导致编译出错

cout << value;

}

17

觉递个对象复构

const 的用法

如果觉得传递一个对象效率太低(导致复制构造函数调用,还费时间)又不想传递指针,又要确保实际参数的值不能在函数中被修改,那么可以使用:

const T & 类型的参数

void PrintfObj( const Sample & o ){

o.func(); //error o.SetValue(); //ok

Sample & r = (Sample &) o; //必须强制类型转换r.func(); //ok }

18

常量成员函数的重载

两个函数,名字和参数表都一样,但是一个是const,一个不是,算重载

个不是算重载

19

class CTest {

private :

int n;

public:

CTest() { n = 1 ; }

CTest(){n=1;}

int GetValue() const { return n ; }

(){;}

int GetValue() { return 2 * n ; } };

int main() {

const CTest objTest1;

CTest objTest2;

cout << objTest1.GetValue() << , <<

cout<

objTest2.GetValue() ;

return 0;;

}

输出: 1, 2

20

(l i )成员对象和封闭类

有成员对象的类叫封闭(enclosing)类

class base1 {

private:

int i;

public :

p base1 ( ) { i = 0; }

};

class base2 {

private:

int i;int i;

public :

base2 (int n) { i = n ; }(){;}

};

21

class Big {

class Big{

private:

int n;

base1 b1; // 成员对象

对象

base2 b2, b3; // 成员对象public:

Big ( ) : b2(1), b3(2) {

}

};

Big b; // 如果不定义构造函数则编译出错

22

实验三 类、对象基础知识

实验三类、对象基础知识 一、实验目的 1、熟练掌握类、对象的的概念以及对事物的抽象。 2、熟练掌握成员、方法的概念以及构造方法的概念。 3、熟练掌握封装性,多态性的概念 4、理解面向对象的程序设计方法。 二、实验内容与要求 1运行下面的程序,理解面向对象的程序设计方法的基本概念。 class value { public int x,y; public value(int a,int b) { x=a; y=b; } } public class Ch31 { public static void main(String args[]) { int total; value num=new value(24,65); total=num.x+num.y; System.out.println("add="+total); } } 2、定义一个类实现银行帐户的概念,包括的变量有"帐号"和"存款余额",包括的方法有"存款"、"取款"、"查询余额"和”显示帐号”,。定义主类,创建帐户类的对象,并完成相应操作。提示:关键代码如下: public int getleftmoney(){ return leftmoney; } public void savemoney(double money){ leftmoney+=money; } public void getmoney(double money){ if(money<=leftmoney) leftmoney-=money; else System.out.println("只能取:"+leftmoney); } …

实验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/ab16177747.html,); error!! } } class Account { private String account; private String name; private String address; private double balance;

类和对象练习题

类和对象 一、选择题 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,以下为其构造方法的声明,其中正确的是

类与对象

类与对象1:Point类1 Description 定义一个Point类,数据成员包括私有数据成员为double类型的点坐标x,y;成员函数包括构造函数Point(用于实现对数据成员x,y的初始化),成员函数Display(用于输出点坐标x、y,输出格式为点坐标用逗号分隔并半角圆括号括起来)。 main函数如下(不得修改main函数): int main() { double x,y; cin>>x>>y; Point p1(x,y); p1.Display(); return 0; } Input Output Sample Input 12.5 22.7 Sample Output (12.5,22.7) ************************************************** #include using namespace std; class Point { public: Point(double xx,double yy) { x=xx;y=yy; } void Display() { cout<<"("<>x>>y; Point p1(x,y); p1.Display(); return 0; } 类与对象2:Point类2 Description

定义一个Point类,数据成员包括私有数据成员为double类型的点坐标x,y;成员函数包括构造函数Point(用于实现对数据成员x,y的初始化)、成员函数Set(用于改变数据成员x、y的值)、成员函数Display(用于输出点坐标x、y,输出格式为点坐标用逗号分隔并半角圆括号括起来)。 main函数如下(不得修改main函数): int main() { double x1,y1,x2,y2; cin>>x1>>y1; cin>>x2>>y2; Point p1(x1,y1); p1.Display(); p1.Set(x2,y2); p1.Display(); return 0; } Input Output Sample Input 10 25.5 5.5 20 Sample Output (10,25.5) (5.5,20) ************************************************** #include using namespace std; class Point { public: Point(double xx,double yy) { x=xx;y=yy; } void Display() { cout<<"("<>x1>>y1; cin>>x2>>y2;

实验3 类的定义、对象的建立与使用

实验报告_实验3 类的定义、对象的建立与使用(学 生学号_姓名) 实验目的: 1、理解C++中class与struct的区别; 2、掌握类的定义以及成员函数的定义方法; 3、掌握对象的定义和对象成员的访问方式; 4、熟悉this指针的基本用法。 实验内容 二、((基础题)请按照下列要求定义一个Clock时钟类,并创建对象,再调用相应方法: 程序代码: //日期类的应用 #include using namespace std; class Clock // 定义日期类 { public: // 定义公有成员函数 void setTime(int h, int m, int s); void showTime(); private: // 定义私有数据成员 int hour; int minute;

int second; }; // 类定义体的结束 //类实现部分 void Clock::setTime(int h, int m, int s) { hour = h; minute = m; second = s; } void Clock::showTime() { cout << "设置时间为" << hour <<":"<< minute <<":"<< second << endl; } int main() { Clock now; now.setTime(8,30, 0); now.showTime(); return 0; } 三、(基础题)请按要求,编写程序(请将类的定义、成员函数的实现、类的使用分开): rect.h代码: #include

实验3 类与对象的设计

实验3 类与对象的设计 专业:计算机科学与技术班级:10计本1班学号:姓名: 实验地点:B102实验时间:2011/10/18 指导教师:李佐勇 一、实验目的 1.掌握声明类的方法,类和类成员的概念以及定义对象的方法; 2.初步掌握利用类和对象的概念进行面向对象程序开发的方法; 3.掌握构造函数、复制构造函数、析构函数的定义与使用; 4.理解类的组合以及组合类构造函数的定义与使用。 二、实验环境 一台PC机,Windows XP操作系统,Visual C++ 6.0开发环境。 三、实验内容 1.Lab3_1.cpp:定义并实现一个矩形类(rectangle),其包含数据成员:长(length)、宽(width);函数成员:Show_length (显示矩形的长度)、Show_width (显示矩形的宽度)、Get_area (计算矩形的面积),除了上述成员函数,自行思考构造函数的设计。 2.Lab3_2.cpp:定义一个满足课后题目4-20要求的复数类Complex。 (注意:题目1、2选作一题即可) 3.Lab3_3.cpp:定义CPU类,其包含数据成员:主频(frequency)、字长(wordlength)、倍频系数(coefficient)。其中,字长为枚举型enum cpu_wordlen={W16,W32,W64,W128,W256},frequency为float型,coefficient为double型。此外,类的公有成员函数run和stop分别提示CPU的运行与停止。请给出构造函数(带参数、不带参数)、拷贝构造函数、析构函数、run、stop函数的定义,并在函数体内给出相应的提示便于观察程序运行过程,结合实验理解构造函数、拷贝构造函数、析构函数的调用顺序。 4.Lab3_4.cpp:请结合组合类的概念来描述计算机类Computer,其包含数据成员:芯片(cpu)、内存(ram)、显示器(monitor);函数成员:run:提示计算机正在运行、stop:提示计算机停止工作、用户自定义的构造函(有参数、无参数)。芯片cpu是lab3_2中CPU类的对象,内存ram是单位为M的整型数据,显示器Monitor为屏幕对角线英寸的整型数据。请写出类Computer的定义以及各个成员函数的实现,并在每个成员函数的函数体中给出相应的提示便于观察程序运行过程。观察构造函数和复制构造函数的调用顺序。 四、实验记录 1. #include using namespace std; class rectangle{ public: void show_length(float x); void show_width(float y); void get_area(float x,float y); private: float x,y; }; inline void rectangle::show_length(float x){ cout<<"The length of the rectangle is:"<

实验报告_实验3 类与对象

实验报告_实验3 类与对象(学生学号_姓 名) 一、实验目的 1.熟悉类的组成,掌握类的声明方法; 2.理解构造方法的作用,并掌握构造方法的定义; 3.熟练使用访问器和设置器实现信息隐藏和封装; 4.熟悉一般方法、构造方法的重载; 5.能够正确地区分静态变量与实例变量、静态方法与实例方法的不同,掌握静态变量和静态方法的使用;6.掌握对象的创建、引用和使用及向方法传递参数的方式; 7.掌握this关键字的使用以及对象数组的创建和访问; 8.掌握Java包的创建、包成员的各种访问方式; 9.掌握一维数组:声明,创建,初始化,数组元素的访问; 10.掌握多维数组的概念:二维数组的声明,初始化,元素的访问。 二、实验内容与步骤 1.请回答下列问题: (1)Cirecle类定义了几个属性?它们的类型、访问权限各为什么? 答:两个PI,floatl类型,静态私有权限 Radius,float;类型,私有权限 (2)类中的“PI”的值可以在程序的方法中更改吗? 答:不可以,因为PI为静态变量 (3)Cirecle类定义了几个方法?它们的访问权限怎样?

答:四个,getRadius(),setRadius(float radius),getPerimeter(),getArea()都是公有权限 2.写出Rectangle类的程序代码: class Rectangle { private float width; private float length; public float getWidth( ) //获取矩形宽度 {return width;} public float getLength( ) //获取矩形长度 {return length;} public float getPerimeter( ) //获取矩形周长 {return 2*(width+length);} public float getArea( ) //获取矩形面积 {return (width*length);} public void setWidth(float w) //设置矩形宽度 {width=w;} public void setLength(float l) //设置矩形长度 {length=l;} } 3.回答下列问题: (1)该程序中有几个类?主类是什么?如果将这两个类放在一个文件中,源程序文件名应是什么?答:两个类:Circle、CircleTest;主类是CircleTest;源程序文件名是CircleTest。

JAVA基础-第3章类与对象-练习题-200910

第3章类与对象 一.选择题 1.下列不属于面向对象编程的特性是(D)。 A.封装性 B. 继承性 C. 多态性 D. 编译执行 2.下列类的声明中不合法的是(C)。 A. class People{…} B. class 植物{…} C. Class A{…} D. public class 共有类{… 3.下列方法的声明中不合法的是(C)。 A. float area(){…} B. void area(){…} C. double area(d){…} D. int area(int r){…} 4. 下列构造方法(构造器)的调用中正确的是(C)。 A. 按照一般的方法调用 B. 由用户直接调用 C. 只能通过new自动调用 D. 被系统调用 5.下列程序运行的结果是(A)。 class Book{ int width; int length; } public class A{ static void f(Book p){ p.width=20; p.length=40; } public static void main(String args[]){ Book b=new Book(); b.width=10; b.length=20; f(b); System.out.print(" "+b.width); System.out.print(" "+b.length); } } A. 20 40 B. 10 40 C. 10 20 D. 以上都不对 6.下列程序运行的结果是(D)。 public class A{ static void f(int y){ y=y+10; } public static void main(String args[]){ double x=10; f(x); System.out.println(x); } }

类与对象作业

类与对象作业一、选择题 1.MyClass类定义如下: class MyClass{ public MyClass ( int x) { } } C 如下方式创建对象,()是正确的。 A.MyClassmyobj = new MyClass; B.MyClassmyobj = new MyClass( ); C.MyClassmyobj = new MyClass( 1 ); 括号里定义一个参数就需要在新定义 的时候有一个参数。 D.MyClassmyobj = new MyClass( 1, 2 ); 解析: 一般的自定义方法 类名方法名(形参){方法体} String dancing (string wuzhong){ Return wuzhong; } 构造方法: 1)没有返回值 2.A以下代码中,this是指()。 class bird { int x, y; 成员变量 void fly (int x, int y) { 局部变量this.x =x; this.x中的x是成员变量,x是局部变量 this. y =y; } } A.bird B.fly C.bird 或fly D.不一定 3.A下述()说法是不正确的。 A.实例变量是用static关键字声明的 B.实例变量是类的成员变量 C.方法变量可在方法执行时创建 D.方法变量在使用之前必须初始化 类变量是用static关键字声明的4.c下列各种办法的定义中,()是正确 的。 A.void myFun ( int X=1 ){ } B.void myFun ( int& X) { } C.void myFun ( int X) { } D.void myFun ( int * X) { } 5.B下面关于构造方法的说法不正确的 是()。 A.构造方法没有返回值 B.构造方法不可以重载 C.构造方法一定要与类名相同 D.构造方法也属于类的方法,用于创建对 象的时候给成员变量赋值 构造方法可以重载 6.c下面()是正确的方法重载() A.int fun ( int a, float b) { } float fun ( int a, float b) { } B.float fun ( int a, float b) { } float fun ( int x, float y) { } C.float fun (float a) { } float fun (float a, float b) { } D.float fun1 ( int a, float b) { }

实验四-类与对象

实验四类与对象 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.评分标准

实验一、类与对象

实验一类与对象 一、实验目的 1.掌握类的定义和使用。 2.掌握类的对象的声明。 3.复习具有不同访问属性的成员的访问方式。 4.观察构造函数和析构函数的执行过程。 5.使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。 二、实验课时 4学时 三、实验任务 1.定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run(提示信息“CPU开始运行”)、stop(提示信息“CPU停止运行”)。其中,为枚举类型CPU_Rank,定义为enum CPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency为单位是MHz的整型数,voltage 为浮点型的电压值。在main函数中定义该类的一个对象,并调用其公有成员函数,观察构造函数和析构函数的调用顺序。试试能不能在主函数中打印该对象的属性值,并分析原因。 2.在上述CPU类中添加成员函数,分别用于设置及获取各属性的值,并在main函数中调用这些函数。观察当这些函数被设置成private或public时会有什么不同。 3.定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram 为RAM类的一个对象,cdrom为CDROM类的一个对象。CPU类的定义为实验任务1,RAM、CDROM类可以自由设置一些属性,并提供类似的run、stop这两个成员函数。在main函数中测试这个类,分析成员函数的运行顺序。 4.定义一个Point类,属性为坐标X、Y的值,包含有如下成员函数:构造函数、析构函数、设置与获取X和Y的值的函数,并测试程序的输出结果。

实验三 类与对象(1)——耿祥义

实验三类与对象(1) 一、实验目的 (1)掌握面向对象程序设计的方法和Java作为面向对象程序设计语言的特点; (2)掌握类得封装与对象的使用; (3)掌握修饰符和构造方法的使用规则; (4)掌握构造方法的使用,方法重载用于多态 (5)掌握包的使用 二、实验要求 (1)编写一个体现面向对象思想的程序; (2)编写一个创建对象和使用对象的方法的程序; (3)编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序; (4)编写体现类的多态性(成员方法重载、构造方法重载)的程序。 三、实验内容 (一)Java类的设计与编程 1. 创建一个Application 应用程序Demo3_ 2.java 文件.在Demo3_2.java文件中定义两个类。一个是CCircle,另一个是主类Demo3_2。 程序功能:描述一个圆类,其主要属性为半径,还有一个非常重要的常量是圆周率。该圆可以求出面积,可以设置半径和取得半径大小。 class CCircle { double pi; double radius; double getRadius() { return radius; } void setCircle(double r, double p) { pi=p; radius=r; } double getCircleArea() { return pi*radius*radius; } } public class Demo3_2 { public static void main(String args[]) { CCircle cir1=new CCircle(); cir1.setCircle(2.0,3.1416); System.out.println("园半径="+cir1.getRadius()); System.out.println("园面积="+cir1.getCircleArea()); cir1.pi=3.14159; cir1.radius=10.0;

实验3 类与对象

实验3 类与对象 一、实验目的 本实验的目的用于指导读者掌握Java语言面向对象的程序设计方法,理解对象的封装等概念,要求读者在调试实例程序后,总结出面向对象的事务定义以及以对象的形式进行封装等内容。 二、实验内容 1、课本P221,8-6 和课本P237,8.1题 2、编写一个名为“复数”的类,包含复数的实部和虚部(数据成员),以及复数之间的基本算术运算:加、减(方法成员),并要求复数加减运算,程序运行中能对给定的复数进行运算,并打印运算的结果。 3、用类来描述游戏角色的交手次数、经验值、生命值之间的关系,并断定角色决斗的胜负。 三、实验要求 1、加减运算能够接收不同类型的参数既可以实现复数与实数的加减、复数与复数的加减运算。 2、两游戏角色决斗。角色1交手次数+1,生命值-1,经验值+2;角色2交手次数+1,生命值-2,经验值+3。经验值每增加50时,生命值+1;生命值<0判为负。生命值初始为1000,经验值初始为0。 3、给定二个不同的角色,判定交手的胜负关系。 4、实验报告给出决斗结果和交手次数 5、实验报告给出所有源代码。 四、实验环境 1、PC微机; 2、DOS操作系统或 Windows 操作系统; 3、Eclipse程序集成环境。 五、实验步骤 内容一: 1、创建“复数”类Complex,定义实部、虚部成员 2、定义构造函数接收二个double参数用来初始化数据成员

3、定义二个复数运算函数plus()以及minus()各接收一个复数类型以实现复数与复数的加减运算。 4、定义二个复数运算函数plus()以及minus()各接收一个double类型以实现复数与与实数的加减运算。 4、定义一个打印方法。 5、在main()方法中创建复数对象并调用相关方法来验证。 内容二: 1、建立角色类Role,给出相应的成员,并能以生命值、经验值初始化角色对象。 2、在角色类中建立fight方法,接收一个角色类型的参数并与之“战斗”,返回胜者信息。 3、在主函数中初始化二个角色,调用fight方法。 六、测试数据 略 七、实验报告(学生完成) 实验报告应包括以下几个部分: 1、程序流程图; 2、程序的数据结构设计; 3、程序的源代码及相关注释 4、程序运行结果的分析。 八、思考题(学生完成) 1.定义一个点类“Point”。Point 类的属性有x 轴和y 轴坐标,可以通过方法setX()设置x轴坐标,方法setY()设置y 轴坐标,方法getX()获得x 轴坐标,方法getY()获得y 轴坐标。编写一个测试类PointTest 来创建Point 类的对象,测试该类。 2.编程定义一个栈类,它封装了栈数组,判断栈空方法、判断栈满方法以及进栈和出栈。

实验3 类和对象

实验三类和对象 一、实验目的: 熟悉类和对象的定义及使用;熟悉static关键字、this关键字,访问权限等。 二、实验内容: 1.编写一个Java应用程序,该程序有2个类:V ehicle(机动车)和User(主类)。 Vehicle类的成员变量有:speed(速度)、power(功率)。成员方法有:speedUp(int s)—加速,speedDown(int d)—减速,setPower(int p)—设置功率,getPower()—获取功率 请按下面给出的程序模版,填写缺少的代码,完成程序。 Vehicle.java public class Vehicle{ 代码1 //声明double型变量speed 代码2 //声明int型变量power void speedUp(int s) { 代码3 //将s的值累加到speed } void speedDown(int d) { 代码4 //从speed中减去d } void setPower(int p) { 代码5 //将p赋给power } void getPower() { 代码6 //返回power的值 } double getSpeed() { return speed; } } User.java public class User { public static void main(String args[]){ Vehicle car1,car2; 代码7 //创建对象car1 代码8 //创建对象car2 car1.setPower(128); car2.setPower(76); System.out.println(“car1的功率是:”+car1.getPower());

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

浙江理工大学信息学院 面向对象程序设计实验报告 实验名称:类的定义与使用学时安排: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; int n,floorNumber; class Elevator { private: int floor; //电梯总的楼层数 bool up; //是否上行,bool为布尔类型,可取值true或false bool down; //是否下行 int currentFloor; //当前所在楼层 public: Elevator(int floor); void setUpButton(); //按下上行按钮 void setDownButton(); //按下下行按钮 void setFloorNumber(int floorNumber); //根据要进入的楼层电梯开始运行,并逐层显示经过的楼层

实验2(07) 类与对象

班级:姓名:学号:成绩 面向对象编程基础(一)简单的类和对象 实验目的: 1.掌握类的定义,熟悉属性、构造函数、方法的作用,掌握用类作为类型 声明变量和方法返回值; 2.理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实例 的方法和属性; 实验数据记录及分析(或程序及运行结果) 1.写一个名为Rectangle的类表示同一种颜色的矩形类。其成员属性包括宽 width、高height,类属性包括颜色color(默认颜色是蓝色),width和height 都是double型的,而color则是String类型的。要求该类具有: (1)合理的构造函数,完成各属性的初始赋值 (2)使用get和set的形式完成各个属性的访问及修改 (3)计算面积的getArea()方法 (4)合理的toString方法。 主函数如下: public static void main(String[] args) { Rectangle r; System.out.println("创建一个默认初值的矩形:"); r = new Rectangle(); System.out.println("\t" + r); System.out.println("修改具有默认初值矩形的宽为10,高为20:"); r.setWidth(10); r.setHeight(20); System.out.println("\t" + r); System.out.println("修改所有矩形对象的颜色为红色"); Rectangle.setColor("红色"); System.out.println("\t" + r); System.out.println("创建一个宽10,高30的矩形"); r = new Rectangle(10, 30); System.out.println("\t" + r); System.out.println("创建一个边长为1的正方形:"); r = new Rectangle(1); System.out.println("\t" + r); }

类和对象

6.1实验目的和要求 1.熟悉面向对象的基本概念。 2.进一步掌握类的各种成员的使用方法。 3.掌握对象之间通信的基本方法。 6.2实验内容与步骤 题目1 点和直线类 (1)创建C#控制台应用程序L6_1。 (2)在程序中新建一个点类CzPoint,为其定义两个double类型的私有字段成员x和y,分别表示点的横坐标和纵坐标。 (3)为CzPoint定义两个公有属性X、Y,分别用于封装对字段x 和y的读写访问。 (4)定义CzPoint的带参构造函数,在其中对字段x和y进行初始化。参考源代码如下: public CzPoint(double x, double y) { this.x = x; this.y = y;

} (5)为CzPoint定义公有方法Move,用于按指定的水平距离和垂直距离移动坐标点。参考源代码如下: public void Move(double dx, double dy) { x += dx; y += dy; } (6)对CzPoint类进行相等和不相等操作符重载。两个坐标点相等,是指它们的横坐标和纵坐标都相等。 (7)在程序主方法中创建坐标为(1,2)和(3,3)的两个坐标点对象,判断它们是否相等;而后将第一个坐标点移动到第二个坐标点上,再判断它们是否相等。 (8)在程序中再新建一个直线类CzLine,为其定义两个double类型的字段成员a和b,分别表示直线的斜率和截距;再定义字段的封装属性A和B,但它们都是只读的。

(9)为CzLine定义两个构造函数,一个根据斜率和截距来创建直线对象,另一个则根据两个CzPoint对象来构造直线对象(直线穿过这两个点)。后一个的参考源代码如下: public CzLine(CzPoint p1, CzPoint p2) { if (p1 == p2) throw new ArgumentException("两点不能相同"); this.a = (p2.Y - p1.Y) / (p2.X - p1.X); this.b = p1.Y - this.a * p1.X; } (10)为CzLine定义公有方法Move,但它只用于平移直线,而不改变直线的斜率。再为其定义公有方法Contains,用于判断某点是否在该直线上。 (11)类似的,为CzLine重载相等和不等操作符。 (12)最后在程序主方法中采用不同的方式创建直线对象,并编译运行程序,测试它们的使用效果。 程序的整体结构如下:

类和对象(例子)

例10.4定义并测试长方形类CRect,长方形是由左上角坐标(left, top)和右下角坐标(right, bottom)组成。 #include #include using namespace std; class CRect //定义长方形类 { private: int left, top, right, bottom ; public: void setcoord(int, int, int, int); void getcoord(int *L, int *T, int *R, int *B) //注意:形参为指针变量{ *L = left; *T = top; *R = right; *B = bottom; } void print(void) { cout<<"Area = "; cout<

CRect r, rr; int a, b, c, d ; r.setcoord(100, 300, 50, 200); r.getcoord( &a, &b, &c, &d ); //用变量的指针做参数,带回多个结果cout << "left=" << a << '\t'; cout << "top=" << b << endl; cout << "right=" << c << '\t'; cout << "bottom=" << d << endl; r.print( ); rr = r; //对象可整体赋值 rr.print( ); return 0; } 运行结果: left=100 top=300 right=50 bottom=200 Area = 5000 Area = 5000 返回ppt讲稿 例10.5 定义日期类,利用构造函数初始化数据成员。程序放在头文件date.h中,如下: #include using namespace std; class Date { int Year, Month, Day;

相关文档
最新文档