面向对象程序设计复习提纲范文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象程序设计复习
1. 函数重载是指两个或两个以上的函数取相同的函数名,但形参的个数或类型不同。
2.若有指针p指向变量x,则*p与x的表示是等价的。
3.假定AA为一个类,a为该类公有的数据成员,若要在该类的一个成员函数中访问它,则书写格式为a。
4.执行int *p= new int[10]操作,使p指向的元素可表示为p[0](或*p )
5.除了能通过构造函数的函数体内赋值语句对数据成员实现初始化外,C++还提供一种初始化数据成员的方法参数初始化表。
6.假定p所指向对象为25,p+1指向对象为42,则执行*p++运算后,p所指向对象值为42.
7.在调用成员函数时,this指针被初始化成被调函数所在类的对象的地址。
8.为了使指针值始终保持为初始值,可以将指针变量声明为const型(常指针)
9.静态数据成员可以初始化,但只能在类体外进行初始化。
10.私有继承中,基类中的保护成员在私有派生类中的访问属性是私有
11.预处理命令在程序中都是以#符号开头的。
12.当一个函数调用表达式只能与一个模板函数相符合时,将首先根据模板函数生成一个实例函数,然后再调用它执行。
13.假定用户没有给一个名为AB的类定义析构函数,则系统为其隐含定义的析构函数为~AB(){}
14.派生类的成员函数不能直接访问基类的私有成员。
15.若需要定义基类中的一个成员函数为虚函数,则必须在函数头的开始使用virtual保留字。
16.为了实现运算符重载,必须定义一个叫做operator的运算符函数。
17.Time为类名,有定义void Time::fun()const,fun称为常成员函数
18.对象的指针就是对象空间的地址
19.保护继承中,基类中的公用成员在保护派生类中的访问属性是保护
20.假定p所指向对象为2,p+1指向对象为3,则执行*++p运算后,p所指向对象值为3 完成程序题
31.下列函数的功能是实现两个数的最小公倍数,请填空:
#include<iostream>
_ ①_;using namespace std
int lcd(int x,int y){
②;}return x*y/hcf(x,y)
32. 下面函数的功能是:统计子字符串substr在字符串str中出现的次数。
请填空:
#include<iostream.h>
int SubStrNum(char *str,char *substr)
{
int Num=0;
int h1,h2,p1,p2;
h1=strlen(str); h2=strlen(substr);
_ ①_;p1=0
while(p1<h1)
{
p2=0;
while(str[p1]==substr[p2]&&p2<h2&&p1<h1)
{
p1++;p2++;
}
if(p1==h1&&p2<h2) ②;break
if(p2==h2) Num++;
else p1=p1-p2+1;
}
return Num;
}
,请填空:
33. 下面函数的功能是实现C n
m
#include<iostream.h>
long fun(int m,int m)
{if(m= =n||n= =0) _ ①_;return 1
else return ②;m*fun(m-1,n)/(m-n)
}
34. 下列类定义了复数的加法运算,其中重载了“+”运算符。
请填空:#include<iostream.h>
class Complex{
double re,im;
public:
Complex(double r,double i):re(i),im(i){}
double real() const{return re;}
double image() const{return im;}
_ ①_+=(Complex a){ Complex&operator
②; re+=a.re
③;im+=a.im
return *this;
}
};
35. 下面函数实现两个数的最大公约数。
请填空:
#include<iostream.h>
int hcf(int x,int y)
{
int t,r;
while(_ ①_){ x!=y
if(x>y) x=x-y;
else if(y>x) y=y-x;
}
②;return y
}
31.下面程序的功能是在屏幕的同一行上显示1~9的平方值,每个值之间用“,”隔开。
请填空:
#include<iostream.h>
void main(){
int i;
for(_ _) i=1;i<10;i++或i=1;i<=9;i++
cout<< ; i*i<<”,”
cout<<endl;
}
32.不用strcat函数编程实现字符串连接函数strcat的功能,将字符串DStr连接到字符串SStr的尾部。
请填空:
#include<iostream.h>
void main()
{
char SStr[180],DStr[180];
cin>>SStr>>DStr;
int SL=strlen(SStr);
int DL=strlen(DStr);
for(int i=0; _ _;i++) i<DL+1
; SStr[i+SL]=DStr[i]
cout<<SStr;
}
33. 如果有以下定义,重载“<<”运算符,以实现变量的输出。
请填空:
#include<iostream.h>
第 3 页共14 页
#include<string.h>
struct mystr
{char s[100];int len;};
ostream &operator<<(ostream &o,mystr str)
{cout<< _ _<<endl; str.s
cout<<”Len=”<<<<endl; str.len
return 0;
}
34. 下面递归函数的功能是求x的y次幂,请填空:
#include<iostream.h>
double power(double x,unsigned y)
{if(y==0) _ _; return 1
else return ; x*power(x,y-1)
}
35. 定义Boat与Car两个类,二者都有weight属性,定义二者的一个友元函数
totalWeight(),计算二者的重量和。
请填空:
#include<iostream.h>
class Boat;
class Car{
private:int weight;
public: Car(int j) {weight=j;}
friend int totalWeight(Car &aCar,Boat &aBoat);
};
class Boat{
private:_ _; int weight
public: Boat(int j) {weight=j;}
friend int totalWeight(Car &aCar,Boat &aBoat);
};
int totalWeight(Car &aCar,Boat &aBoat){ ;} return aCar.weight+aBoat.weight
程序分析题
36. 阅读以下程序,写出程序运行结果
*****
****
***
**
*
#include<iomanip.h>
void main()
{ int i,j;
for(i=0;i<5;i++)
{ for(j=i;j<5;j++) cout<<’*’;
cout<<endl;
}
}
37. 阅读以下程序,写出程序运行结果___100 100
20 20____________
#include <iostream>
#include <iomanip>
using namespace std;
int main( )
{ int a=10;
int &b=a;
a=a*a;
cout<<a<<setw(6)<<b<<endl;
b=b/5;
cout<<b<<setw(6)<<a<<endl;
return 0;
}
38. 阅读以下程序,写出程序运行结果___ 1 5 7 11 13 37 _________________
#include<iostream.h>
void main()
{ for(int i=1,s=0;i<20;i++)
{ if(i%2==0 || i%3==0) continue;
cout<<i<<’ ’;
s+=i;
}
cout<<s<<endl;
}
39.阅读以下程序,写出程序功能从输入流中读取9个字符,赋给指定的字符数组,指定换行符为终止字符.
#include <iostream>
using namespace std;
第 5 页共14 页
int main( )
{char ch[20];
cout<<″enter a sentence:″<<endl;
cin.get(ch,10,′\\n′);
cout<<ch<<endl;
return 0;
}
40. 阅读以下程序,写出程序功能__通过函数来实现复数相加__
程序运行结果为__ c1=(3+4i)
c2=(5-10i)
c1+c2=(8,-6i)
#include <iostream>
using namespace std;
class Complex
{public:
Complex( ){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex complex_add(Complex &c2);
void display( );
private:
double real;
double imag;
};
Complex Complex∷complex_add(Complex &c2)
{Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;}
void Complex∷display( )
{cout<<″(″<<real<<″,″<<imag<<″i)″<<endl;}
int main( )
{Complex c1(3,4),c2(5,-10),c3;
c3=plex_add(c2);
cout<<″c1=″; c1.display( );
cout<<″c2=″; c2.display( );
cout<<″c1+c2=″; c3.display( );
return 0;
}
36. 阅读以下程序,写出程序运行结果__2 1 5 2__________________ #include<iostream.h>
void main( )
{ int a[10]={76,83,54,62,40,75,90,92,77,84};
int b[4]={60,70,90,101};
int c[4]={0};
for(int i=0;i<10;i++)
{ int j=0;
while(a[i]>=b[j]) j++;
c[j]++;
}
for(i=0;i<4;i++) cout<<c[i]<<’ ’;
cout<<endl;
}
37. 阅读以下程序,写出程序运行结果__ array b:
1 4
2 5
3 6
#include <iostream>
using namespace std;
int main( )
{ int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
cout<<″array a:″<<endl;
for (i=0;i<=1;i++)
{ for (j=0;j<=2;j++)
{ b[j][i]=a[i][j];
}
cout<<endl;
}
cout<<″array b:″<<endl;
for (i=0;i<=2;i++)
{ for(j=0;j<=1;j++)
cout<<b[i][j]<<″″;
cout<<endl;
}
return 0;
第7 页共14 页
}
38. 阅读以下程序,写出程序运行结果_____3,5
0,0
#include <iostream>
using namespace std;
class A{
float x,y;
public:
A(float a, float b) { x=a;y=b; }
A() { x=0; y=0; }
void Print(void) { cout<<x<<'\t'<<y<<endl; }
};
void main(void)
{ A *pa1,*pa2;
pa1=new A(3.0, 5.0);
pa2=new A;
pa1->Print();
pa2->Print();
delete pa1;
delete pa2;
}
39.阅读以下程序,写出程序功能___将数组中的n个数按相反顺序存放。
void inv(int x[ ], int n)
{ int t, i, j, m=(n-1)/2;
for (i=0;i<=m; i++)
{ j=n-1-i;
t=x[i]; x[i]=x[j]; x[j]=t;
}
}
40. 阅读以下程序,写出程序功能显示输出数组a[n]中大于等于平均值的所有元素值。
void f2(double a[], int n)
{ int i; double sum=0;
for(i=0;i<n;i++)
sum+=a[i];
sum/=n;
for(i=0;i<n;i++)
if(a[i]>=sum) cout<<a[i]<<’ ’;
cout<<endl; }
程序设计题:
41. 编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。
要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的基类。
#include<iostream.h>
#include<string.h>
class Student; //学生类
class Teacher; //教师类
class Person //人类
{
private:
int id;
char name[20];
public:
Person(int x,char *p)
{
id=x;
strcpy(name,p);
}
void show(Student s)
{
cout << "编号:" << id << endl;
cout << "姓名:" << name << endl;
cout << "班号:" << s.getclassid() << endl;
cout << "成绩:" << s.getscore() << endl;
}
void show(Teacher t) //show函数的重载
{
cout << "编号:" << id << endl;
cout << "姓名:" << name << endl;
cout << "职称:" << t.getzhicheng() << endl;
cout << "部门:" << t.getbumen() << endl;
} (3分)
};
class Student:public Person
{
private:
int classid;
double score;
public:
void setclassid(int x) //设置私有属性班级号
{
classid=x;
}
void setscore(double y) //设置私有属性成绩
第9 页共14 页
{
score=y;
}
int getclassid()
{
return classid;
}
double getscore()
{
return score;
}
}; (3分)
class Teacher:public Person
{
private:
char zhicheng[10]; //职称
char bumen[10]; //部门
public:
void setzhicheng(char *p) //设置私有属性职称
{
strcpy(zhicheng,p);
}
void setbumen(char *p) //设置私有属性部门
{
strcpy(bumen,p);
}
char getzhicheng()
{
return zhicheng;
}
char getbumen()
{
return bumen;
}
}; (3分)
void main()
{
Person s1(1,"小强");
Student p1;
p1.setclassid(15);
p1.setscore(90.8);
s1.show(p1);
} (1分)
42. 将以二进制形式存放在磁盘文件stud.dat中的数据读入内存并在显示器上显示。
#include <fstream>
using namespace std;
struct student
{string name;
int num;
int age;
char sex;
}; (3分)
int main( )
{student stud[3];
int i;
ifstream infile(″stud.dat″,ios::binary);
if(!infile)
{cerr<<″open error!″<<endl;
abort( );
} (2分)
for(i=0;i<3;i++)
infile.read((char*)&stud[i],sizeof(stud[i]));
infile.close( ); (3分)
for(i=0;i<3;i++)
{cout<<″NO.″<<i+1<<endl;
cout<<″name:″<<stud[i].name<<endl;
cout<<″num:″<<stud[i].num<<endl;;
cout<<″age:″<<stud[i].age<<endl;
cout<<″sex:″<<stud[i].sex<<endl<<endl;
}
return 0; (2分)
}
(1)把它们存到磁盘文件中;
(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来;(3)将第3个学生的数据修改后存回磁盘文件中的原有位置。
(4)从磁盘文件读入修改后的5个学生的数据并显示出来。
#include <fstream>
using namespace std;
struct student
{int num;
char name[20];
float score;
};
第11 页共14 页
int main( )
{student stud[5]={1001,″Li″,85,1002,″Fun″,97.5,1004,″Wang″,54,
1006,″Tan″,76.5,1010,″ling″,96};
fstream iofile(″stud.dat″,ios::in|ios::out|ios::binary);
//用fstream类定义输入输出二进制文件流对象iofile
if(!iofile)
{cerr<<″open error!″<<endl;
abort( );
} (2分)
for(int i=0;i<5;i++)//向磁盘文件输出5个学生的数据
iofile.write((char *)&stud[i],sizeof(stud[i])); (2分)
student stud1[5]; //用来存放从磁盘文件读入的数据
for(int i=0;i<5;i=i+2)
{iofile.seekg(i*sizeof(stud[i]),ios::beg); //定位于第0,2,4学生数据开头
iofile.read((char *)&stud1[i/2],sizeof(stud1[0]));
//先后读入3个学生的数据,存放在stud1[0],stud[1]和stud[2]中
cout<<stud1[i/2].num<<″″<<stud1[i/2].name<<″″<<stud1[i/2].score<<endl;
//输出stud1[0],stud[1]和stud[2]各成员的值
}
cout<<endl;
stud[2].num=1012; //修改第3个学生(序号为2)的数据
strcpy(stud[2].name,″Wu″);
stud[2].score=60;
iofile.seekp(2*sizeof(stud[0]),ios::beg); //定位于第3个学生数据的开头
iofile.write((char *)&stud[2],sizeof(stud[2])); //更新第3个学生数据
iofile.seekg(0,ios::beg); (2分) //重新定位于文件开头
for(int i=0;i<5;i++)
{iofile.read((char *)&stud[i],sizeof(stud[i])); //读入5个学生的数据
cout<<stud[i].num<<″″<<stud[i].name<<″″<<stud[i].score<<endl;
}
iofile.close( );
return 0;
} (2分)
42.写一个程序,定义抽象基类Shape且由它派生出3个派生类:Circle (圆形),Rectangle(矩形)Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。
#include <iostream>
using namespace std;
//定义抽象基类Shape
class Shape
{public:
virtual double area() const =0; //纯虚函数
}; (2分)
//定义Circle类
class Circle:public Shape
{public:
Circle(double r):radius(r){} //结构函数
virtual double area() const {return 3.14159*radius*radius;}; //定义虚函数
protected:
double radius; //半径
}; (2分)
//定义Rectangle类
class Rectangle:public Shape
{public:
Rectangle(double w,double h):width(w),height(h){} //结构函数
virtual double area() const {return width*height;} //定义虚函数
protected:
double width,height; //宽与高
};(2分)
class Triangle:public Shape
{public:
Triangle(double w,double h):width(w),height(h){} //结构函数
virtual double area() const {return 0.5*width*height;} //定义虚函数
protected:
double width,height; //宽与高
};
//输出面积的函数
void printArea(const Shape &s)
{cout<<s.area()<<endl;} //输出s的面积(2分)
int main()
{
Circle circle(12.6); //建立Circle类对象circle
cout<<"area of circle =";
printArea(circle); //输出circle的面积Rectangle rectangle(4.5,8.4); //建立Rectangle类对象rectangle
cout<<"area of rectangle =";
printArea(rectangle); //输出rectangle的面积
Triangle triangle(4.5,8.4); //建立Triangle类对象cout<<"area of triangle =";
第13 页共14 页
printArea(triangle); //输出triangle的面积return 0;
}
(2分)。