《2022年《面向对象程序设计》编程题复习及其答案 .pdf》由会员分享,可在线阅读,更多相关《2022年《面向对象程序设计》编程题复习及其答案 .pdf(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面向对象程序设计复习题1、(C+ 的输入输出)天猫优惠券,我就要券 定义一个函数 max ,实现输入两个数a、b,比较并从小到大输出。2、(函数的重载)(1)定义一个带两个参数的函数max ,输出最大值。(2)再定义一个带三个参数的函数max ,输出最大值。(3)主函数测试之。3、 (有默认参数的函数)将题 2 用带默认参数的函数实现。4、 (变量的引用)(1)定义一个 swap1函数,以普通形参传入两个变量a、b,互换 a、b 的值。(2)定义一个 swap2函数,以指针形参传入两个变量a、b,互换 a、b 的值。(3)定义一个 swap3函数,以引用形参输入两个变量a、b,互换 a、b 的
2、值。(4)主函数定义两个变量x、y 传入三个函数,观察x、y 值前后的变化。5、 (类的定义)定义一个 student 类,数据成员包括:学号num ,姓名 name ,年龄 age,性别 sex,成员函数包括:(1) set 函数,键盘输入学号,姓名,年龄,性别(2) display函数,输出学生信息。6、 (构造函数和析构函数)定义一个 student 类,数据成员包括:学号num ,姓名 name ,年龄 age,性别 sex,成员函数包括:(1)构造函数,初始化学号,姓名,年龄,性别(2)display函数,输出学生信息。(3)析构函数,输出学生学号。(4)主函数定义多个对象,并注意构
3、造函数和析构函数的调用顺序。7、 (构造函数的重载)在题 6 基础上增加一个默认构造函数,实现构造函数的重载8、将题 6 用带默认参数的构造函数实现。9、 (对象数组和对象的动态建立及释放)在题 8 基础上,实现如下主函数:(1) 在主函数中定义一个包含三个学生的数组,并初始化之。(2) 在主函数中定义一个student 类指针 p 并用 new运算符分配动态内存(3) 用 delete 删除 p 指向的动态内存。(4) 观察构造函数和析构函数的调用。10、 (复制构造函数)在题 8 基础上新增加一个复制构造函数,并主函数新增复制构造对象。11、 (静态成员)定义一个 student 类,数据
4、成员包括:学号num ,姓名 name ,成绩 score ,累加总分 sum ,累计人数 count 。成员函数包括:构造函数统计人数count ;(1) 非静态成员 total函数,求 sum 。(2) 静态成员 average 函数,求平均成绩。(3) 主函数定义包含 3 个学生的数组,求三个学生的平均成绩。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 26 页 - - - - - - - - - 12、 (友元函数)定义一个 Time 类,私有数据成员包括:时
5、hour、分 minute 、秒 second 成员函数:构造函数Time()定义一个友元函数display ,使之访问私有成员输出时分秒。13、 (运算符重载)(1) 定义一个复数类,实现对“+”,f; coutfendl; return 0; (2) 定义一个 Time 类,实现对“ +”的前缀、后缀重载。 P134 i +:单目运算符 天猫优惠券,我就要券14、( 单继承及派生类构造函数 ) (1)定义一个 person 类,数据成员包括:姓名name,年龄 age,性别 sex 成员函数:构造函数及display函数(2)定义一个派生类student ,公有继承与 person 类,
6、新增成员:专业major,入学日期 enterdate(Date类自定义 )。(3)主函数定义 student 对象,各类构造函数的调用顺序。15、 (多继承)在 14 题基础上由 person 类再派生出 teacher 类,新增成员:职称 title,工资wage 16、 (虚继承)由 student 类和 teacher 类共同派生出 graduate 类,新增成员 : 年级 grade,将 person 类定义成虚基类,实现用虚继承解决二义性。17、 (抽象类及多态性)定义一个抽象基类Shape ,由它派生出 5 个派生类, Circle (圆形) 、Square(正方形) 、Rect
7、angle (矩形) 、Trapezoid (梯形)、Triangel (三角形)。用虚函数分别计算几何图形面积, 并求他们的和。 要求定义一个基类指针, 使它指向每一个派生类对象,体现其多态性。1、#include using namespace std; void max() int a,b; cout 请输入两个数: ab; if(ab) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 26 页 - - - - - - - - - coutb aendl; else
8、 couta bendl; int main() max(); return 0; 2、#include using namespace std; void max(int a,int b) if(ab) coutaendl; else coutbb & ac) coutac) coutbendl; else coutcendl; int main() max(2,5); max(7,5,3); return 0; 3、#include using namespace std; void max(int a,int b,int c=0) if(ab & ac) coutac) coutbend
9、l; else coutcendl; int main() max(2,5); max(7,5,3); return 0; 4、#include using namespace std; void swap1(int a,int b) int temp; temp=a; a=b; b=temp; void swap2(int *a,int *b) int temp; temp=*a; *a=*b; *b=temp; void swap3(int &a,int &b) int temp; temp=a; a=b; b=temp; int main() int x,y; x=5;y=7; swap
10、1(x,y); coutx=x y=yendl; x=5;y=7; swap2(&x,&y); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 26 页 - - - - - - - - - coutx=x y=yendl; x=5;y=7; swap3(x,y); coutx=x y=yendl; return 0; 5、#include #include using namespace std; class student private: int num; strin
11、g name; int age; char sex; public: void set() cout请输入:学号,姓名,年龄,性别(f or m )numnameagesex; void display() cout 学号:numendl; cout 姓名:nameendl; cout 年龄:ageendl; cout 性别:sexendl; ; int main() student s; s.set(); s.display(); return 0; 6、#include #include using namespace std; class student 名师资料总结 - - -精品资料
12、欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 26 页 - - - - - - - - - private: int num; string name; int age; char sex; public: /* void set() cout请输入:学号,姓名,年龄,性别(f or m )numnameagesex; */ student(int num,string name,int a,int s) cout 调用构造函数 num=numnum=num; this-name=name; age=
13、a; sex=s; 天猫优惠券,我就要券 void display() cout 学号:numendl; cout 姓名:nameendl; cout 年龄:ageendl; cout 性别:sexendl; student() cout 析构函数 学号: numendl; ; int main() student s(1001,张三,25,f),s1(1002,李四,24,m); /s.set(); s.display(); s1.display(); return 0; 7、#include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
14、- - - - 名师精心整理 - - - - - - - 第 6 页,共 26 页 - - - - - - - - - #include using namespace std; class student private: int num; string name; int age; char sex; public: /* void set() cout请输入:学号,姓名,年龄,性别(f or m )numnameagesex; */ student() cout 调用构造函数 num=0endl; num=0; name=; age=18; sex=f; student(int num,
15、string name,int a,int s) cout 调用构造函数 num=numnum=num; this-name=name; age=a; sex=s; void display() cout 学号:numendl; cout 姓名:nameendl; cout 年龄:ageendl; cout 性别:sexendl; student() cout 析构函数 学号: numendl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 26 页 - - - - -
16、 - - - - ; int main() student s(1001,张三,25,f),s1(1002,李四,24,m),s2; /s.set(); s.display(); coutendl; s1.display(); coutendl; s2.display(); coutendl; return 0; 8、#include #include using namespace std; 天猫优惠券,我就要券 class student private: int num; string name; int age; char sex; public: student(int num=0,
17、string name=,int a=18,int s=f) cout 调用构造函数 num=numnum=num; this-name=name; age=a; sex=s; void display() cout 学号:numendl; cout 姓名:nameendl; cout 年龄:ageendl; cout 性别:sexendl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 26 页 - - - - - - - - - student() cout 天猫优
18、惠券 , 我就要券 学号: numendl; ; int main() student s(1001,张三,25,f),s1(1002,李四,24,m),s2; /s.set(); s.display(); coutendl; s1.display(); coutendl; s2.display(); coutendl; return 0; 9、#include #include using namespace std; class student private: int num; string name; int age; char sex; public: student(int num
19、=0,string name=,int a=18,int s=f) cout 调用构造函数 num=numnum=num; this-name=name; age=a; sex=s; void display() cout 学号:numendl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 26 页 - - - - - - - - - cout 姓名:nameendl; cout 年龄:ageendl; cout 性别:sexendl; student() cout
20、析构函数 学号: numendl; ; int main() student s3=student(1001,张 三 ,25,f),student(1002,李 四,24,m); for (int i=0;i3;i+) 天猫优惠券 , 我就要券 si.display(); coutdisplay(); coutendl; delete p; return 0; 10、#include #include using namespace std; class student private: int num; string name; int age; char sex; public: stud
21、ent(int num=0,string name=,int a=18,int s=f) cout 调用构造函数 num=numnum=num; this-name=name; age=a; sex=s; student(student& s) 天猫优惠券 , 我就要券 num=s.num; name=s.name; age=s.age; sex=s.sex; void display() cout 学号:numendl; cout 姓名:nameendl; cout 年龄:ageendl; cout 性别:sexendl; student() cout 析构函数 学号: numendl; ;
22、 int main() student s1(1001,张三,25,f); student s2(s1); s1.display(); s2.display(); return 0; 11、#include #include using namespace std; class student private: int num; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 26 页 - - - - - - - - - string name; float score
23、; static float sum; static int count; public: student(int num=0,string name=,float s=80) this-num=num; this-name=name; score=s; count+; void display() cout 学号:numendl; cout 姓名:nameendl; cout 成绩:scoreendl; void total(); static float average(); ; float student:sum=0.0; int student:count=0; void studen
24、t:total() sum+=score; float student:average() return sum/count; int main() student s3=student(1001,张三,87),student(1002,李四),student(1003,王五,90); for (int i=0;i3;i+) si.total(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 26 页 - - - - - - - - - cout 平均成绩: stu
25、dent:average()endl; return 0; 12、#include / #include / using namespace std; class Time private: int hour; int minute; int second; public: Time(int h=12,int m=0,int s=0) hour=h; minute=m; second=s; friend void display(Time&); ; void display(Time& t) coutt.hour时t.minute分t.second 秒endl; int main() Time
26、 t,t1(13,12,22); display(t); display(t1); return 0; 13、 (1)/ 方法 1:多次重载 + #include / #include / using namespace std; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 26 页 - - - - - - - - - class Complex private: float real; float image; public: Complex(float real
27、,float image) this-real=real; this-image=image; Complex() real=0; image=0; friend Complex operator+(Complex &a,Complex &b); friend Complex operator+(Complex &a,float b); friend Complex operator+(float a,Complex &b); friend ostream& operator(istream& input,Complex a); ; Complex operator+(Complex &a,C
28、omplex &b) return Complex(a.real+b.real,a.image+b.image); Complex operator+(Complex &a,float b) return Complex(a.real+b,a.image); Complex operator+(float a,Complex &b) return Complex(b.real+a,b.image); ostream& operator0) outputa.real+a.imageiendl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -
29、- - - 名师精心整理 - - - - - - - 第 14 页,共 26 页 - - - - - - - - - else outputa.reala.imagei(istream& input,Complex a) inputa.reala.image; return input; int main() Complex a(3,4),b(1,2),c,d,e,f; c=a+b; d=a+5; e=3+b; coutcf; coutfendl; return 0; / 方法 2:使用转换构造函数实现#include class Complex private: float real; fl
30、oat image; public: Complex(float real,float image) this-real=real; this-image=image; Complex() real=0; image=0; / 定义转换构造函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 26 页 - - - - - - - - - Complex(float r) real=r; image=0; friend Complex operator+(Complex &
31、a,Complex &b); friend ostream& operator(istream& input,Complex a); ; Complex operator+(Complex &a,Complex &b) return Complex(a.real+b.real,a.image+b.image); ostream& operator0) outputa.real+a.imageiendl; else outputa.reala.imagei(istream& input,Complex a) inputa.reala.image; return input; int main()
32、 Complex a(3,4),b(1,2),c,d,e,f; c=a+b; d=a+5; e=3+b; coutcf; coutfendl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 26 页 - - - - - - - - - return 0; (2)#include using namespace std; class Time public: Time()minute=0;sec=0; Time(int m,int s):minute(m),sec(s)
33、 Time operator+(); Time operator+(int); void display()coutminute:sec=60) sec-=60; +minute; return *this; Time Time:operator+(int) Time temp(*this); sec+; if(sec=60) sec-=60; +minute; return temp; int main() Time time1(34,59),time2; cout time1 : ; time1.display(); +time1; cout+time1: ; time1.display(
34、); time2=time1+; couttime1+: ; time1.display(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 26 页 - - - - - - - - - cout time2 : ; time2.display(); return 0; 14、#include #include using namespace std; class Date private: int year; int month; int day; public:
35、Date(int y=2013,int m=1,int d=1) year=y; month=m; day=d; void display() coutyear 年month月day日endl; ; class person private: string name; int age; char sex; public: person(string n,int a,char s) name=n; age=a; sex=s; void display() cout 姓名:nameendl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
36、- - 名师精心整理 - - - - - - - 第 18 页,共 26 页 - - - - - - - - - cout 年龄:ageendl; cout 性别:sexendl; ; class student:public person public: student(string n,int a,char s,string maj,int y,int m,int d ):person(n,a,s),enterdate(y,m,d) major=maj; void display() person:display(); cout 专业:majorendl; cout 入学日期: ; ent
37、erdate.display(); private: string major; Date enterdate;/入学日期; int main() student s(张三,20,f,通信,2012,9,6); s.display(); return 0; 15、#include #include using namespace std; class Date private: int year; int month; int day; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
38、 19 页,共 26 页 - - - - - - - - - public: Date(int y=2013,int m=1,int d=1) year=y; month=m; day=d; void display() coutyear 年month月day日endl; ; class person private: string name; int age; char sex; public: person(string n,int a,char s) name=n; age=a; sex=s; void display() cout 姓名:nameendl; cout 年龄:ageend
39、l; cout 性别:sexendl; ; class student:public person public: student(string n,int a,char s,string maj,int y,int m,int d ):person(n,a,s),enterdate(y,m,d) major=maj; void display() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 26 页 - - - - - - - - - person:display
40、(); cout 专业:majorendl; cout 入学日期: ; enterdate.display(); private: string major; Date enterdate;/入学日期; 天猫优惠券 , 我就要券 class teacher:public person public: teacher(string n,int a,char s,string t,float w):person(n,a,s) title=t; wage=w; void display() person:display(); cout 职称:titleendl; private: string ti
41、tle; float wage; ; int main() student s(张三,20,f,通信,2012,9,6); s.display(); teacher t(李四,30,m,讲师,3000); t.display(); return 0; 16、#include #include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 26 页 - - - - - - - - - using namespace std; class Date private: in
42、t year; int month; int day; public: Date(int y=2013,int m=1,int d=1) year=y; month=m; day=d; void display() coutyear 年month月day日endl; ; class person private: string name; int age; char sex; public: person(string n,int a,char s) name=n; age=a; sex=s; void display() cout 姓名:nameendl; cout 年龄:ageendl;
43、cout 性别:sexendl; ; class student:virtual public person 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 26 页 - - - - - - - - - public: student(string n,int a,char s,string maj,int y,int m,int d ):person(n,a,s),enterdate(y,m,d) major=maj; void display() person:di
44、splay(); cout 专业:majorendl; cout 入学日期: ; enterdate.display(); private: protected: string major; Date enterdate;/入学日期; class teacher:virtual public person public: teacher(string n,int a,char s,string t,float w):person(n,a,s) title=t; wage=w; void display() person:display(); cout 职称:titleendl; private
45、: protected: string title; float wage; ; class graduate:public student,public teacher public: graduate(string n,int a,char s,string maj,int y,int m,int d,string t,float w,string 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 26 页 - - - - - - - - - g):person(n,
46、a,s),student(n,a,s,maj,y,m,d),teacher(n,a,s,t,w) grade=g; void display() person:display(); cout 专业:majorendl; cout 入学日期: ; enterdate.display(); cout 职称:titleendl; cout 年级:gradeendl; protected: private: string grade; ; int main() student s(张三,20,f,通信,2012,9,6); s.display(); teacher t(李四,30,m,讲师,3000)
47、; t.display(); graduate g(王五,28,f,计算机 ,2008,9,6,助教,1500, 研二); g.display(); return 0; 17、#include #include using namespace std; class Shape public: virtual void area()=0; ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 26 页 - - - - - - - - - class Circle:publi
48、c Shape public: Circle(double r):radius(r) virtual void area() coutCircle area:3.1415*radius*radiusendl; protected: double radius; ; class Square:public Shape public: Square(double s):side(s) virtual void area() coutSquare area:side*sideendl; protected: double side; ; class Rectangle:public Shape pu
49、blic: Rectangle(double w,double h):width(w),height(h) virtual void area() coutRectangle area: width*heightendl; protected: double width,height; ; class Trapezoid:public Shape public: Trapezoid(double t,double b,double h):top(t),bottom(b),height(h) virtual void area() coutTrapezoid area:0.5*(top+bott
50、om)*heightendl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 26 页 - - - - - - - - - protected: double top,bottom,height; ; class Triangle:public Shape public: Triangle(double w,double h):width(w),height(h) virtual void area() coutTriangle area: 0.5*width*hei