实验一 类与对象(一)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
float read_x(void);
float read_y(void);
void move(float a,float b);
};
void point::set_point(float a,float b)
{x=a ; y=b; }
float point::read_x(void)
{ return x;}
{return real;}
double get_imag( )
{return imag;}
double get_abs( )
{ double t;
t=sqrt(real*real+imag*imag);
return t;
}
};
void main()
{ complex A;
A.set_complex(3.0,4.0);
}
㈢程序设计实验
说明:请将所设计的程序以给定的文件名存放在自己的文件夹下(后同)。
1.定义一个time类保存在“htime.h”中,要求:
⑴数据成员包含时(hour)、分(minute)、秒(second),为私有成员;
⑵能给数据成员提供值的成员函数(默认值为0时0分0秒);
⑶能分别取时、分、秒;
⑷能输出时、分、秒(用“:”分隔),并显示上午(am)或下午(pm);
①私有成员、公有成员不能在类的外部被使用,如果数据成员定义为私有成员、保护成员,则只能通过公有成员函数使用;
②可以定义指向对象的指针用操作符“->”访问对象成员,也可以定义对象的引用,使用方法请参考实验二相关内容。
4.对象的赋值
可以用赋值方式将一个对象赋值给另一个对象,也称为对象的拷贝。
⑴格式:
对象名1=对象名2;
cout <<"real of complex A=";
cout <<A.get_real()<<endl;
cout <<"imag of complex A=";
cout <<A.get_imag()<<endl;
cout <<"abs of complex A= ";
cout <<A.get_abs()<<endl;
⑴C++结构体的成员分为数据成员及成员函数;
⑵C++结构的成员(数据成员或成员函数)可以定义为公有成员(public)、私有成员(private)、保护成员(protected),其缺省定义为公有成员。
2.C++的类
C++提供了一种新的比结构体更为安全的数据类型,即“类”类型。类与结构体最为本质的区别是,成员的缺省定义为私有成员,体现了数据的封装与隐藏性。
#include <iostream.h>
#include <math.h>
class complex
{ private:
double real;
double imag;
public:
void set_complex(double r,double i)
{ real=r;imag=i;}
double get_real( )
float point::read_y(void)
{ return y;}
void point::move (float a,float b)
{ x+=a;y+=b;}
void main(void)
{ point p1,&p2=p1;
p1.set_point(20,30);
cout<<"x="<<p1.read_x();
}
2.按要求完善并调试通过下列程序
程序3
⑴完善“hdate.h”中类的定义:
class Date
{ private:
int year,month,day;
public:
void set_date(int y=2000,int m=1,int d=1)//对数据成员赋值
{}
int get_year() //返回year
}
问题:
⑴程序的输出结果为:
⑵成员函数(方法)set_complex(double r,double i)的作用是;
get_real( )的作用是;get_imag( )的作用是;
get_abs( )的作用是。
⑶将main()函数中的语句行“cout <<A.get_real()<<endl;”改为“cout <<A. real<<endl;”,重新编译程序,将出现其原因是。
⑸有默认值的构造函数(默认值为0时0分0秒)。
说明:成员函数均定义为公有成员。
2.编写一个测试time类的main()函数(存放在exp_104.cpp)中。要求:
⑴定义对象、对象指针、对象的引用;
⑵用输入的值设置时间;
⑶用输出时、分、秒的成员函数显示时间;
⑷用取时、分、秒的成员函数以“时分秒”的格式显示时间;
类体内定义格式:
返回类型(函数名(形参表);
类体外定义格式:
返回类型类名::函数名(形参表)
{函数体}
⑵说明:
①通常,当成员函数代码量较大时,在类外定义成员函数;
②在定义成员函数以前一定要加上类名,类名与函数名间一定要用“::”,以表示与普通函数的区别;
③成员函数中,应给出形参,当无形参时,通常应加上void;
⑴同结构一样,在C++中,“类”是由用户自定义的一种数据类型;
⑵C++的类中包括数据成员及成员函数,即将数据(数据成员)及对数据的操作(成员函数)封装在一个类中。
㈡类的定义
1.定义格式
2.说明:
⑴类的定义(或称类的声明)中,private、protected、public可以按任意顺序出现任意次。
⑵成员的访问限制
在类体外可以通过调用类的公有成员使用私有数据成员或保护数据成员,但不能改变其值。
⑶数据成员通常定义为私有成员,以实现数据的隐藏;成员函数通常定义为公有成员,以通过消息传递访问数据成员;保护成员主要用于继承。
3.数据成员
⑴定义格式:
类型数据成员名;
⑵说明:
①在定义类的数据成员时,由于计算机不给数据成员分配内存空间,不能使用auto、register、extern等进行说明,也不能赋初值;
};
int Date::isleapyear(void)//是闰年返回1,不是闰年返回0
{
}
⑵按注释要求完善下列程序(exp_103.cpp)
#include<iostream.h>
#include"hdate.h"
void main(void)
{ Date da1,da2;
int y,m,d;
da1.set_date(2004,5,1);
①公有成员(public):所定义的成员是开放的,可在任何地方访问(类内部及程序的其他地方);
②私有成员(private):所定义的成员是隐藏的,只能在类内部访问,不能在程序的其他地方访问;
③保护成员(protected):所定义的成员是半开放的,可在类内部访问,也可在其派生类中访问,但不能在程序的其他部分访问。
⑸分别用对象、对象指针、对象的引用调用成员函数。
四、实验收获与创新
1.通过完成本实验,谈谈你对面向对象程序设计的初步认识。
2.自已拟定一个解决实际简单题目,分析并抽象为一个类,然后定义对象测试(类的定义放在头文件中,测试程序用exp_105.cpp保存)
{}
int get_month() //返回month
{}
int get_day() //返回day
{}
int isleapyear(void); //是闰年返回1,不是闰年返回0
void print_date(void)
{cout<<year<<'-'<<month<<'-'<<day<<endl;}
cout<<" y="<<p1.read_y()<<endl;
cout<<"x="<<p2.read_x();
cout<<" y="<<p2.read_y()<<endl;
p2.move(5,5);
cout<<"x="<<p1.read_x();
cout<<" y="<<p1.read_y()<<endl;
④成员函数的返回值类型,与函数原型中的返回类型必须相同;
⑤成员函数与普通函数一样,可以设置参数的默认值;
⑥在类内部定义的成员函数为内置函数,如果要将类外部定义的成员函数设置为内联函数,则应在函数定义前加上inline。
㈢对象的定义及成员的引用
类和对象是面向对象程序设计最重要的两个概念。从程序设计的角度理解,类是将具有相同数据成员、成员函数的操作对象的概括(或抽象),是定义对象的模板;而对象是类的实例化或具体化,即“类”变量。
da1.print_date();
cout<<"year=";cin>>y;
cout<<"month=";cin>>m;
cout<<"day=";cin>>d;
//调用方法set_date(),用消息y,m,d对da2的数据成员赋值
//调用方法输出将da2用“年月日”格式输出年月日
//调用方法输出da2的年是否为闰年
实验一类与对象㈠——类与对象的定义
一、实验目的
1.熟悉类的构成,掌握类的定义方法;
2.掌握对象的定义及对象成员的访问方法;
3.初步熟悉类与对象简单应用及编程。
二、实验学时
课内实验:2课时课外练习:2课时
三本实验涉及的新知识
㈠结构与类
1.C++的结构
C++中的结构是在C语言结构体的基础上扩展得到的。即在C++的结构体中,除可以定义数据成员外,还可以在定义函数,称为成员函数。
1.对象的定义
⑴格式:
类名对象名表;
⑵说明:在定义类时,计算机并不给类分配存储空间,只有定义了对象后,计算机才为对象分配存储空间。
2.对象成员的使用
⑴数据成员的使用
格式:
对象名.数据成员名
(只能是公有数据成员)。
⑵成员函数的使用
格式:
对象名.成员函数名(实参表)
对象名.类名::成员函数名(实参表)
⑶说明:
②数据成员既可为基本数据类型,也可以是复杂数据类型(数组、指针、引用、结构体变量、类的对象等)。
4.成员函数
在面向对象程序设计中,成员函数也称方法,是面向对象程序设计消息传递机制的实现方式。
⑴定义格式
①在类中定义:
返回类型函数名(形参表)
{函数体}
②在类外定义:Leabharlann Baidu
在类中只给出成员函数的原型,成员函数体在类的外部定义。
⑵说明:
①在使用对象赋值语句时,两个对象必须是相同的类;
②对象赋值后,二个对象仍是分离的,当改变某一对象成员的值时,另一对象不会因此而改变;
③对象赋值是一种浅拷贝(即位拷贝,对象有深拷贝将在以后的实验中介绍)。
四、实验内容
㈠验证及认知实验
按要求调试下列程序(exp_101.cpp),并回答相关问题。
㈡知识应用实验
1.分析下列程序,写出程序的输出结果,再上机运行程序验证其正确性,如果不正确,请认真分析出错原因。
程序2(exp_102.cpp)
#include<iostream.h>
class point
{ private:
float x,y;
public:
void set_point(float a,float b);
float read_y(void);
void move(float a,float b);
};
void point::set_point(float a,float b)
{x=a ; y=b; }
float point::read_x(void)
{ return x;}
{return real;}
double get_imag( )
{return imag;}
double get_abs( )
{ double t;
t=sqrt(real*real+imag*imag);
return t;
}
};
void main()
{ complex A;
A.set_complex(3.0,4.0);
}
㈢程序设计实验
说明:请将所设计的程序以给定的文件名存放在自己的文件夹下(后同)。
1.定义一个time类保存在“htime.h”中,要求:
⑴数据成员包含时(hour)、分(minute)、秒(second),为私有成员;
⑵能给数据成员提供值的成员函数(默认值为0时0分0秒);
⑶能分别取时、分、秒;
⑷能输出时、分、秒(用“:”分隔),并显示上午(am)或下午(pm);
①私有成员、公有成员不能在类的外部被使用,如果数据成员定义为私有成员、保护成员,则只能通过公有成员函数使用;
②可以定义指向对象的指针用操作符“->”访问对象成员,也可以定义对象的引用,使用方法请参考实验二相关内容。
4.对象的赋值
可以用赋值方式将一个对象赋值给另一个对象,也称为对象的拷贝。
⑴格式:
对象名1=对象名2;
cout <<"real of complex A=";
cout <<A.get_real()<<endl;
cout <<"imag of complex A=";
cout <<A.get_imag()<<endl;
cout <<"abs of complex A= ";
cout <<A.get_abs()<<endl;
⑴C++结构体的成员分为数据成员及成员函数;
⑵C++结构的成员(数据成员或成员函数)可以定义为公有成员(public)、私有成员(private)、保护成员(protected),其缺省定义为公有成员。
2.C++的类
C++提供了一种新的比结构体更为安全的数据类型,即“类”类型。类与结构体最为本质的区别是,成员的缺省定义为私有成员,体现了数据的封装与隐藏性。
#include <iostream.h>
#include <math.h>
class complex
{ private:
double real;
double imag;
public:
void set_complex(double r,double i)
{ real=r;imag=i;}
double get_real( )
float point::read_y(void)
{ return y;}
void point::move (float a,float b)
{ x+=a;y+=b;}
void main(void)
{ point p1,&p2=p1;
p1.set_point(20,30);
cout<<"x="<<p1.read_x();
}
2.按要求完善并调试通过下列程序
程序3
⑴完善“hdate.h”中类的定义:
class Date
{ private:
int year,month,day;
public:
void set_date(int y=2000,int m=1,int d=1)//对数据成员赋值
{}
int get_year() //返回year
}
问题:
⑴程序的输出结果为:
⑵成员函数(方法)set_complex(double r,double i)的作用是;
get_real( )的作用是;get_imag( )的作用是;
get_abs( )的作用是。
⑶将main()函数中的语句行“cout <<A.get_real()<<endl;”改为“cout <<A. real<<endl;”,重新编译程序,将出现其原因是。
⑸有默认值的构造函数(默认值为0时0分0秒)。
说明:成员函数均定义为公有成员。
2.编写一个测试time类的main()函数(存放在exp_104.cpp)中。要求:
⑴定义对象、对象指针、对象的引用;
⑵用输入的值设置时间;
⑶用输出时、分、秒的成员函数显示时间;
⑷用取时、分、秒的成员函数以“时分秒”的格式显示时间;
类体内定义格式:
返回类型(函数名(形参表);
类体外定义格式:
返回类型类名::函数名(形参表)
{函数体}
⑵说明:
①通常,当成员函数代码量较大时,在类外定义成员函数;
②在定义成员函数以前一定要加上类名,类名与函数名间一定要用“::”,以表示与普通函数的区别;
③成员函数中,应给出形参,当无形参时,通常应加上void;
⑴同结构一样,在C++中,“类”是由用户自定义的一种数据类型;
⑵C++的类中包括数据成员及成员函数,即将数据(数据成员)及对数据的操作(成员函数)封装在一个类中。
㈡类的定义
1.定义格式
2.说明:
⑴类的定义(或称类的声明)中,private、protected、public可以按任意顺序出现任意次。
⑵成员的访问限制
在类体外可以通过调用类的公有成员使用私有数据成员或保护数据成员,但不能改变其值。
⑶数据成员通常定义为私有成员,以实现数据的隐藏;成员函数通常定义为公有成员,以通过消息传递访问数据成员;保护成员主要用于继承。
3.数据成员
⑴定义格式:
类型数据成员名;
⑵说明:
①在定义类的数据成员时,由于计算机不给数据成员分配内存空间,不能使用auto、register、extern等进行说明,也不能赋初值;
};
int Date::isleapyear(void)//是闰年返回1,不是闰年返回0
{
}
⑵按注释要求完善下列程序(exp_103.cpp)
#include<iostream.h>
#include"hdate.h"
void main(void)
{ Date da1,da2;
int y,m,d;
da1.set_date(2004,5,1);
①公有成员(public):所定义的成员是开放的,可在任何地方访问(类内部及程序的其他地方);
②私有成员(private):所定义的成员是隐藏的,只能在类内部访问,不能在程序的其他地方访问;
③保护成员(protected):所定义的成员是半开放的,可在类内部访问,也可在其派生类中访问,但不能在程序的其他部分访问。
⑸分别用对象、对象指针、对象的引用调用成员函数。
四、实验收获与创新
1.通过完成本实验,谈谈你对面向对象程序设计的初步认识。
2.自已拟定一个解决实际简单题目,分析并抽象为一个类,然后定义对象测试(类的定义放在头文件中,测试程序用exp_105.cpp保存)
{}
int get_month() //返回month
{}
int get_day() //返回day
{}
int isleapyear(void); //是闰年返回1,不是闰年返回0
void print_date(void)
{cout<<year<<'-'<<month<<'-'<<day<<endl;}
cout<<" y="<<p1.read_y()<<endl;
cout<<"x="<<p2.read_x();
cout<<" y="<<p2.read_y()<<endl;
p2.move(5,5);
cout<<"x="<<p1.read_x();
cout<<" y="<<p1.read_y()<<endl;
④成员函数的返回值类型,与函数原型中的返回类型必须相同;
⑤成员函数与普通函数一样,可以设置参数的默认值;
⑥在类内部定义的成员函数为内置函数,如果要将类外部定义的成员函数设置为内联函数,则应在函数定义前加上inline。
㈢对象的定义及成员的引用
类和对象是面向对象程序设计最重要的两个概念。从程序设计的角度理解,类是将具有相同数据成员、成员函数的操作对象的概括(或抽象),是定义对象的模板;而对象是类的实例化或具体化,即“类”变量。
da1.print_date();
cout<<"year=";cin>>y;
cout<<"month=";cin>>m;
cout<<"day=";cin>>d;
//调用方法set_date(),用消息y,m,d对da2的数据成员赋值
//调用方法输出将da2用“年月日”格式输出年月日
//调用方法输出da2的年是否为闰年
实验一类与对象㈠——类与对象的定义
一、实验目的
1.熟悉类的构成,掌握类的定义方法;
2.掌握对象的定义及对象成员的访问方法;
3.初步熟悉类与对象简单应用及编程。
二、实验学时
课内实验:2课时课外练习:2课时
三本实验涉及的新知识
㈠结构与类
1.C++的结构
C++中的结构是在C语言结构体的基础上扩展得到的。即在C++的结构体中,除可以定义数据成员外,还可以在定义函数,称为成员函数。
1.对象的定义
⑴格式:
类名对象名表;
⑵说明:在定义类时,计算机并不给类分配存储空间,只有定义了对象后,计算机才为对象分配存储空间。
2.对象成员的使用
⑴数据成员的使用
格式:
对象名.数据成员名
(只能是公有数据成员)。
⑵成员函数的使用
格式:
对象名.成员函数名(实参表)
对象名.类名::成员函数名(实参表)
⑶说明:
②数据成员既可为基本数据类型,也可以是复杂数据类型(数组、指针、引用、结构体变量、类的对象等)。
4.成员函数
在面向对象程序设计中,成员函数也称方法,是面向对象程序设计消息传递机制的实现方式。
⑴定义格式
①在类中定义:
返回类型函数名(形参表)
{函数体}
②在类外定义:Leabharlann Baidu
在类中只给出成员函数的原型,成员函数体在类的外部定义。
⑵说明:
①在使用对象赋值语句时,两个对象必须是相同的类;
②对象赋值后,二个对象仍是分离的,当改变某一对象成员的值时,另一对象不会因此而改变;
③对象赋值是一种浅拷贝(即位拷贝,对象有深拷贝将在以后的实验中介绍)。
四、实验内容
㈠验证及认知实验
按要求调试下列程序(exp_101.cpp),并回答相关问题。
㈡知识应用实验
1.分析下列程序,写出程序的输出结果,再上机运行程序验证其正确性,如果不正确,请认真分析出错原因。
程序2(exp_102.cpp)
#include<iostream.h>
class point
{ private:
float x,y;
public:
void set_point(float a,float b);