面向对象程序设计.docx
- 文档编号:3431926
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:17
- 大小:17.72KB
面向对象程序设计.docx
《面向对象程序设计.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计.docx(17页珍藏版)》请在冰豆网上搜索。
面向对象程序设计
面向对象程序设计(OOP)(上)
类:
用来描述特性相同或相近的一组对象的结构和行为(如“人”),
对象:
代表待处理问题的实体(如“张三”)
面向对象程序设计的基本特性:
封装,继承,和多态性。
//定义读者类Reader
classReader{
public:
Reader();//构造函数
intregistration(char*name);//注册
intborrowBook(intbookNo);//借书
intreturnBook(intbookNo);//还书
private:
char*name;//姓名
char*certifNo;//借书证号
};
类也被称为抽象数据类型,类的定义以关键字class开始,Reader是类名,花括号括起来的部分是类的体,以分号结束。
public后面定义的是类的公有成员,可以被外界程序直接访问,因此也叫类的接口。
private后面定义的是类的私有成员,只能被类的成员函数和友元访问。
//ex10_1.cpp:
编写一个雇员类Employee,能响应询问名字和薪水的消息,然后创建该类的两个对象,
调用//对象的成员函数输出对象的信息
#include
#include
//定义类Employee
classEmployee{
public:
//构造函数
Employee(char*n)
{name=newchar[strlen(n)+1];
strcpy(name,n);
}
//析构函数
~Employee()
{delete[]name;}
voidsetsalary(doubles)
{salary=s;}
voidprintsalary()
{cout<<"Mysalaryis$"< "< voidwhoAreyou() {cout< private: char*name; doublesalary; }; main() { //声明类Employee的对象a和b Employeea("Zhangsan"),b("Lisi"); a.setsalary(123.4);//给对象阿a发消息setsalary b.setsalary(156.7);//给对象b发消息setsalary a.whoAreyou();//给对象a发消息whoAreyou a.printsalary();//给对象a发消息printsalary b.whoAreyou();//给对象b发消息whoAreyou b.printsalary();//给对象b发消息printsalary return0; } 构造函数: 它的函数名和类名完全相同,没有返回类型,其作用是在创建对象时对对像中的数据进行初始化。 析构函数: 没有返回类型,其作用是在对象撤消时做些清理工作(如释放动态申请的内存)。 //用结构实现栈,通过函数实现压栈.弹栈.栈的初始化和栈的释放等功能, 并用两种不同的方式(通过栈函数和直接操作栈的内部数据)来使用该 //ex11_1.cpp #include structStack{//结构定义 int*data;//栈数据存储 intmemNum;//栈元素个数 intsize;//栈大小 }; intinitStack(Stack&s,intsize);//函数原型 voiddelStack(Stack&s);//函数原型 intpopStack(Stack&s,int&num);//函数原型 intpushStack(Stack&s,intmem);//函数原型 //初始化栈 intinitStack(Stack&s,intsize) {s.data=newint[size]; if(s.data==NULL) return0; s.memNum=0; s.size=size; return1; } //释放栈 voiddelStack(Stack&s) {delete[]s.data;} //弹栈,无数据时返回0,否则返回1 intpopStack(Stack&s,int&num) {if(s.memNum==0) return0; num=s.data[--s.memNum]; return1; } //压栈,成功返回1,否则返回0 intpushStack(Stack&s,intnum) {if(s.memNum==s.size) return0; s.data[s.memNum++]=mem; return1; } main() {inti,num; StacknewStack; initStack(newStack,10); //压栈 cout<<"Pushintegerstostack: "< for(i=0;i<10;i++) {cout< pushStack(newStack,i); } cout< //弹栈 cout<<"ReadingfromfunctionpopStack: "< for(i=0;i<10;i++) {if(popStack(newStack,num)) cout< } cout< //释放栈 delStack(newStack); return0; } //文件stack.h //类Stack的定义 classStack{ public: Stack(ints); ~Stack(); intpop(int&num);//函数原型 intpush(intnum);//函数原型 private: int*data;//栈数据存储 intmemNum;//栈元素个数 intsize;//栈大小 }; //文件stack.cpp //类stack的实现 //构造函数 #include"stack.h" Stack: : Stack(ints) { data=newint[s]; size=s; memNum=0; } //析构函数 Stack: : ~Stack() {delete[]data;} //弹栈函数,不成功返回0,成功返回1,栈元素由参数返回 intStack: : pop(int&num) {if(memNum==0) return0; num=data[--memNum]; return1; } //压栈函数,不成功返回0,成功返回1 intStack: : push(intnum) {if(memNum==size) return0; data[memNum++]=mem; return1; } //文件ex11_2.cpp //测试栈类Stack #include"stack.h" #include main() {inti,num; StackmyStack(10); cout<<"Push: "; for(i=0;i<11;i++) {if(! myStack.push(i)) cout< else cout< } cout<<"Pop: "; for(i=0;i<11;i++) {if(myStack.pop(num)) cout< else cout< } cout< return0; } //文件stack.h //类Stack的定义 classStack{ public: Stack(ints); ~Stack(); intpop(int&num);//函数原型 intpush(intnum);//函数原型 private: int*data;//栈数据存储 intmemNum;//栈元素个数 intsize;//栈大小 }; //文件stack.cpp //类stack的实现 //构造函数 #include"stack.h" Stack: : Stack(ints) { data=newint[s]; size=s; memNum=0; } //析构函数 Stack: : ~Stack() {delete[]data;} //弹栈函数,不成功返回0,成功返回1,栈元素由参数返回 intStack: : pop(int&num) {if(memNum==0) return0; num=data[--memNum]; return1; } //压栈函数,不成功返回0,成功返回1 intStack: : push(intnum) {if(memNum==size) return0; data[memNum++]=mem; return1; } //文件ex11_2.cpp //测试栈类Stack #include"stack.h" #include main() {inti,num; StackmyStack(10); cout<<"Push: "; for(i=0;i<11;i++) {if(! myStack.push(i)) cout< else cout< } cout<<"Pop: "; for(i=0;i<11;i++) {if(myStack.pop(num)) cout< else cout< } cout< return0; } “Stack: : ”其中,“Stack”是类名,“: : ”是二目作用域运算符,表示该函数是Stack的成员函数。 访问对象的成员方式: 对象名或对象的引用加点操作去访问,也可以使用类指针加箭头-> 去访问。 //定义圆类,利用类的复合定义圆柱类,然后创建圆柱类的实例化对象的信息. //文件circle.h //定义类Circle #if! defined_CIRCLE_H_ #define_CIRCLE_H_ #include classCircle{ public: Circle(doublea=5.0,doubleb=5.0,doublec=5.0); ~Circle; doublearea(); voidprint(); private: doublex,y;//x,y坐标 doubler;//半径 }; #endif //文件circle.cpp //类Circle的实现部分 #include"circle.h" #definePI3.14159 Circle: : Circle(doublea,doubleb,doublec) { x=a; y=b; if(c>0) r=c; else r=5.0; cout<<"Circleobjectstart: x="< < } Circle: : ~Circle() { cout<<"Circleobjectend: X="< <<",r="< } doubleCircle: : area() { returnPI*r*r; } voidCircle: : print() { cout<<"x="< } //文件column.h //定义类Column #if! defined_COLUMN_H_ #define_COULMN_H_ #include"circle.h" classColumn{ public: Column(doubleh=5.0,doublea=5.0,doubleb=5.0,doublec=5.0); ~Column(); doublevolume(); private: Circlecircle;//数据成员circle doubleheight;//数据成员height }; #endif //文件column.cpp //类Column的实现部分 #include"column.h" Column: : Column(doubleh,doublea,doubleb,doublec) : circle(a,b,c)//为数据成员circle调用其构造函数 { if(h>0) height=h; else height=5.0; cout<<"Columnobjectstart: height="< circle.print(); cout< } Column: : ~Column() { cout<<"Columnobjectend: height="< circle.print(); cout< } doubleColumn: : volume() { returnheigh*circle.area; } //文件ex12_1.cpp //使用类Column #include"column.h" #include main() { Columnobj(2.3,3.4,4.5,5.6,); cout<<"Thevolumeofobjis"< return0; } //定义圆类,利用类的复合定义圆柱类,然后创建圆柱类的实例化对象的信息. //文件circle.h //定义类Circle #if! defined_CIRCLE_H_ #define_CIRCLE_H_ #include classCircle{ public: Circle(doublea=5.0,doubleb=5.0,doublec=5.0); ~Circle; doublearea(); voidprint(); private: doublex,y;//x,y坐标 doubler;//半径 }; #endif //文件circle.cpp //类Circle的实现部分 #include"circle.h" #definePI3.14159 Circle: : Circle(doublea,doubleb,doublec) { x=a; y=b; if(c>0) r=c; else r=5.0; cout<<"Circleobjectstart: x="< < } Circle: : ~Circle() { cout<<"Circleobjectend: X="< <<",r="< } doubleCircle: : area() { returnPI*r*r; } voidCircle: : print() { cout<<"x="< } //文件column.h //定义类Column #if! defined_COLUMN_H_ #define_COULMN_H_ #include"circle.h" classColumn{ public: Column(doubleh=5.0,doublea=5.0,doubleb=5.0,doublec=5.0); ~Column(); doublevolume(); private: Circlecircle;//数据成员circle doubleheight;//数据成员height }; #endif //文件column.cpp //类Column的实现部分 #include"column.h" Column: : Column(doubleh,doublea,doubleb,doublec) : circle(a,b,c)//为数据成员circle调用其构造函数 { if(h>0) height=h; else height=5.0; cout<<"Columnobjectstart: height="< circle.print(); cout< } Column: : ~Column() { cout<<"Columnobjectend: height="< circle.print(); cout< } doubleColumn: : volume() { returnheigh*circle.area; } //文件ex12_1.cpp //使用类Column #include"column.h" #include main() { Columnobj(2.3,3.4,4.5,5.6,); cout<<"Thevolumeofobjis"< return0; } //定义三角型类Triangle,并使用友元函数修改其私有数据成员 //文件triangle.h //定义类Triangle #if! defined_TRIANGLE_H_ #define_TRTANGLE_H_ classTriangle{ friendvoidsetA(Triangle&t,intn);// public: Triangle(intx=5,inty=5,intz=5); voidprint(); private: inta,b,c; }; #endif //文件triangle.cpp //实现类Triangle #include"triangle.h" #include Triangle: : Triangle(intx,inty,intz); { if(x+y>z&&x+z>y&&y+z>x) { a=x; b=y; c=z; } else { a=b=c=5; } } voidTriangle: : print() { cout<<"Triangle:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计