《C 面向对象程序设计(第二版)教学课件 陈维兴 林小茶 编著 C 铁道第2版 3》由会员分享,可在线阅读,更多相关《C 面向对象程序设计(第二版)教学课件 陈维兴 林小茶 编著 C 铁道第2版 3(104页珍藏版)》请在金锄头文库上搜索。
1、在线教务辅导网:http:/教材其余课件及动画素材请查阅在线教务辅导网QQ:349134187 或者直接输入下面地址:http:/第3章 类和对象(一) 3.1 类的构成3.2 成员函数的定义3.3 对象的定义和使用3.4 构造函数与析构函数本章主要内容3.1 类的构成3.1.1 从结构体到类3.1.2 类的构成本节主要内容3.1.1 从结构体到类1.结构体的扩充 例如下面声明了一个日期结构体:struct Dateint year; /年int month; /月int day; /日;C语言结构体一般格式如下 :struct 结构名数据;例3.1 有关日期结构体的例子。 #include
2、using namespace std; struct Date /声明了一个名为Date的结构体int year;int month;int day; ; int main() Date date1;date1.year=2010 ;/可以在结构体外直接访问数据yeardate1.month=8; /可以在结构体外直接访问数据monthdate1.day=25; /可以在结构体外直接访问数据daycout /例3.2-1 using namespace std;class pointprivate:int x,y;public:void setpoint(int a,int b) x=a;
3、y=b;int getx() return x; int gety() return y; ; void main() point op1; /定义了类point的对象op1int i,j;op1.setpoint(1,2);/调用op1的成员函数setpoint,/初始化对象op1i=op1.getx(); /调用op1的成员函数getx,取op1的x值j=op1.gety(); /调用op1的成员函数gety,取op1的y值cout /分析运行结果 using namespace std; class point private:int x,y; /私有数据成员public:void in
4、it(int a,int b) x=a; y=b; int getx() return x; int gety() return y; ;void main( ) point op; /定义了类point的对象opint i,j;op.init(1,2);i=op.x; j=op.y; cout /分析运行结果 using namespace std; class point private:int x,y; /私有数据成员public:void init(int a,int b) x=a; y=b; int getx() return x; int gety() return y; ; vo
5、id main( ) point op;int i,j;op.init(1,2);i=op.getx();j=op.gety();cout /学生类的完整程序 using namespace std; class Studentprivate:int number;float score;public:void input(int number1,float score1); /输入学生 成绩void modify(float score1); /修改学生 成绩void print(); /打印学生 成绩 ; void Student:input(int number1,float score
6、1) number=number1; score=score1; void Student:modify(float score1) score=score1; void Student:print( ) cout ”操作符。例如: class Date public:int year; ;Date d, *ptr; /定义对象d和指向类Date的指针变量 ptrptr= /使ptr指向对象dcoutyear; /输出ptr指向对象中的成员yeard.year(*ptr).year 三者是等价的ptr-year(3)通过对象的引用访问对象中的成员如果为一个对象定义了一个引用,也就是为这个 对象
7、起了一个别名。 例如: class Date public:int year;. ; Date d1; /定义类Date的对象d1 Date /定义类Date的引用d2,/并用对象d1进行初始化 cout /例3.5 using namespace std; class ABC public: void init(int i,int j) a=i; b=j; void show() cout/例3.7-1 using namespace std; class Datepublic:Date(int y,int m,int d); /声明构造函数Date的原 型void showDate();p
8、rivate:int year; int month; int day; ; Date:Date(int y,int m,int d) /定义构造函数Date year=y; month=m; day=d; inline void Date:showDate() cout”来访问对象的成员,而不是 “.” 。 类名 *指针变量名=new 类名(实参表);将例3.7-1的主函数改成用这种方法来实现。 int main() Date *pdate = new Date(2010,4,28); pdate-showDate();delete pdate;return 0; 利用构造函数创建对象的另
9、一种方法:用指针和new来实现。说明:(1) 构造函数的名字必须与类名相同,否则编 译程序将把它当作一般的成员函数来处理。(2) 构造函数没有返回值,在声明和定义构造 函数时,是不能说明它的类型的,甚至说明为 void类型也不行。 例如上述构造函数不能写成void Date(int y,int m,int d); 说明为void类型也不行(3) 与普通的成员函数一样,构造函数的函数体 可写在类体内,也可写在类体外。如例3.7-1中的类Date可以声明如下: class Date public:Date(int y,int m,int d) / 构造函数定义在类内 year=y; month=m
10、; day=d;void showDate() cout /例3.8 using namespace std; class Apublic:A(int x1):x(x1),rx(x),pi(3.14) void print() cout using namespace std;class D int mem1;int mem2;public:D(int i):mem1(i),mem2(mem1+1) cout using namespace std;class D int mem1;int mem2;public:D(int i):mem2(i),mem1(mem2+1) cout using
11、 namespace std; class D int mem1;int mem2;public:D(int i):mem2(i),mem1(mem2+1) cout using namespace std; class D int mem2;int mem1; public:D(int i):mem2(i),mem1(mem2+1) cout /例3.10-1 class Box private:int height,width,length; public: Box(int h=10,int w=10,int len=10); int volume(); ; Box:Box(int h,i
12、nt w,int len) height=h; width=w; length=len; int main( ) Box box1; cout/例3.11含有构造函数和析构函数的 Date类。 using namespace std; class Datepublic:Date(int y,int m,int d); / 声明构造函数Date(); / 声明析构函数void setDate(int y,int m,int d);void showDate();private:int year; int month; int day; ;Date:Date(int y,int m,int d)
13、/ 定义构造函数 cout #include class complex private:double real;double imag; public:complex(double r=0.0,double i=0.0); / 声明构造 函数complex(); / 声明析构 函数double abscomplex(); ;授课时,请教师 根据教学需要,可 在在例3.11和例 3.11-1两题中选一 。complex:complex(double r,double i) /定义构造函 数 cout using namespace std; class Myclasspublic:int no
14、; ; int main() Myclass a;cout using namespace std; class Myclasspublic:char name10;int no; ; int main() Myclass a=“chen“,25;cout class Location private: int X,Y; public:void Init(int initX, int initY) X=initX; Y=initY; int GetX( ) return X; int GetY( ) return Y; ; int main( ) Location A3;A3.Init(785,980);cout /例3.15 分析下列程序的运行结果。 using namespace std; class Datepublic:Date(int y,int m,int d); /带有参数的构造函数void setDate(int y,int m,int d); void showDate(); private:int year; int month; int da