C++复习题目整理

C++总复习题
一、单项选择题
1.在每个C++程序中都必须包含有这样一个函数,该函数的函数名为( A )。
A. main B. MAIN C. name D. function
2. 如果class类中的所有成员在定义时都没有使用关键字public、private或protected,则所有成员缺省定义为( C )。
A) public B) protected C) private D)static
3.一个类的所有对象共享的是( D )。
A)私有数据成员 B)公有数据成员 C)保护数据成员 D)静态数据成员
4.动态联编所支持的多态性称为( D )。
A. 虚函数 B. 继承 C. 编译时多态性 D. 运行时多态性
5.下面有关重载函数的描述中,正确的是( C )。
A)重载函数必须具有不同的返回值类型 B)重载函数形参个数必须不同
C)重载函数必须具有不同的形参表 D)重载函数名可以不同
6.假定MyCIass为一个类,那么下列的函数说明中,( D )为该类的析构函数。
A)void~MyClass(); B)~MyClass(int n); C)MyClass( ); D)~MyClass( );
7.下列关于C++函数的说明中,正确的是( C )。
A)内联函数就是定义在另一个函数体内部的函数
B)函数体的最后一条语句必须是return语句
C)调用一个函数之前,如果还没有定义这个函数,必须先声明其原型
D)编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式
8.假定MyCIass为一个类,那么下列的函数说明中,( C )为该类的无参构造函数。
A)void MyClass(); B)~MyClass(int n); C)MyClass( ); D)~MyClass( );
9.下列是重载加法运算符的函数原型声明,其中错误的是( A )。
A)MyClass operator+(double,double); B)MyClass operator+(double,MyClass);
C)MyClass operator+(MyClass,double); D)MyClass operator+(MyClass,MyClass);
10.下列对类的构造函数和析构函数描述正确的是(A)。
A)构造函数可以重载,析构函数不能重载 B)构造函数不能重载,析构函数可以重载
C)构造函数可以重载,析构函数可以重载 D)构造函数不能重载,析构函数不能重载
11.在函数定义前加上关键字“inline”,表示该函数被定义为( B )。
A)重载函数 B)内联函数 C)成员函数 D)普通函数
12.下列有关类与对象的说法中,( C ) 是不正确的。
A) 对象是类的一个实列 B) 任何一个对象只能属于一个具体的类
C) 一个类只能有一个对象 D) 类和对象的关糸和数椐类型与变量的关糸类似
13.类的析构函数的作用是( D )。
A) 作为类的一般成员函数 B) 类的初始化 C) 对象的初始化 D) 对象的删除
14.一个类的友元函数或友元类可以访问该类的( D )。
A) 私有成员 B) 保护成员 C) 公有成员 D) 所有成员
15.下列关于成员函数特征的描述中,( D ) 是错误的。
A) 成员函数一定是内联函数 B) 成员函数可以重载
C) 成员函数可以设置参数的默认值 D) 成员函数可以不设置参数的默认值
16.下列函数中,( C ) 不是类的成员函数。
A) 构造函数 B) 析构函数 C) 友元函数 D) 拷贝构造函数
17.下列的描述中,( B ) 是错误的。
A) 公有继承时基类中的public成员在派生类中仍是public的
B) 公有继承时基类中的private成员在派生类中是private的
C) 公有继承时基类中的protected成员在派生类中仍是protected的
D) 私有继承时基类中的public成员在派生类中仍是private的
18.
class A
{ int i, j;
public:
A(int m, int n): i(m), j(n) { }
int Geti() { return i;}
};
class B: public A
{ int k;
public:
B(int m, int n, int u): A(m, n), k(u) {}
void Make( ) { k = i * j; }
};
int main()
{ B b(1, 2, 3);
return 0;
}
则上述定义中,( A ) 是非法的表达式.
A) k=ij; B) int k; C) return i; D) void Make( )
19.假定CTest为一个类,并且有一无默认值的有参构造函数和一无参构造函数,则执行“CTest objTest;”语句时将自动调用该类的( B )。
A) 有参构造函数 B) 无参构造函数 C) 拷贝构造函数 D) 赋值重载函数
20、面向对象程序设计思想的主要特征中不包括( D )。
A. 封装性 B. 多态性 C. 继承性 D. 功能分解,逐步求精
21、考虑下面的函数原型声明:void testDefaulParam(int a,int b=7,char z=’
’);
下面函数调用中,不合法的是( C )。
A. testDefaulParam(5); B. testDefaulParam(5,8);
C. testDefaulParam(5,’#’); D. testDefaulParam(0,0,’*’);

22、下列语句中,将函数int sum(int x, int y)正确重载的是( C )。
A. float sum(int x, int y); B. int sum(int a, int b);
C. float sum(float x, float y); D. double sum(int y, int x);
23、下列表示引用的方法中,( A )是正确的。
已知:int a=1000;
A. int &x=a; B. char &y; C. int &z=1000; D. float &t=&a;
24、已知X类,则当程序执行到语句:X array[3];时,调用了( D )次构造函数。
A. 0 B. 1 C. 2 D. 3
25、下面关于友元的描述中,错误的是( D )。
A. 友元函数可以访问该类的私有数据成员
B. 一个类的友元类中的成员函数都是这个类的友元函数
C. 友元可以提高程序的运行效率
D. 类与类之间的友元关系可以继承
26、有关析构函数的说法,不正确的是( B )。
A.析构函数有且仅有一个
B.析构函数和构造函数一样可以有形参
C.析构函数的功能是在系统释放对象之前作一些内存清理工作
D.析构函数无任何函数类型
27、可以在类外用p.a的形式访问派生类对象p的基类成员a,其中a是( D )。
A.私有继承的公用成员 B.公用继承的私有成员
C.公用继承的保护成员 D.公用继承的公用成员
28、在公有继承的情况下,基类非私有成员在派生类中的访问权限(B )
(A) 受限制 (B)保持不变 (C)受保护 (D)不受保护
二、填空题
1.重载运算符“+”的函数名为( operator+ )。

2.在C++中,如果类的名称是CTest,则此类的构造函数名称为( CTest() )。
3.在类的对象被创建时,( 构造函数 )函数会被自动调用。
4.对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先执行 基类 的构造函数,再执行调用子对象类的构造函数,最后执行派生类的构造函数体中的内容。
5.类的具体表现是通过创建 对象 来操作的。
6.假定AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类的构造函数的次数为 10 。
7、在C++中,三种继承方式的说明符号为 private 、 public 和 protected,如果不加说明,则默认的继承方式为 private 。
8、若要把void fun( )定义为类A的友元函数,则应在类A的定义中加入语句friend void fun(A &a)。
9、运算符重载要求保持其原来的操作数个数、 优先级 、 结合性 。
10、列出C++中两种用户自定义的数据类型: 结构体 、 类 。
11、构造函数的作用是 在创建对象时为对象分配存储空间和初始化对象的数据成员。
12、C++类的组成包括数据成员和__成员函数___,友元_不是_该类的成员函数。
友员函数是用关键字_friend_修饰的非成员函数。

13.观看以下程序:
class point
{
public:
void show() {cout<<”point”<<endl;}
};
void main()
{
point p1;
point *p;
p=&p1;
__p1.show();//通过对象p1访问show函数
__p->show();
//通过指针p访问show函数
}
三、读程序写结果
1.若有以下程序:
class A
{ int a;
public:
A(int aa = 0 ){ a = aa; }
~A( ) {cout << "Destructor A! " << a << endl; }
};
class B: public A
{ int b;
public:
B(int aa = 0, int bb = 0): A(aa) { b = bb; }
~B() { cout << "Destructor B! " << b << endl; }
};
int main()
{ B x(5), y(6,7);
return 0;
}
上面程序的输出结果为:
Destructor B! 7
Destructor A! 6
Destructor B! 0
Destructor A! 5

2.若有以下程序:
#include <iostream.h>
class Point
{ int x, y;
public:
Point() { x = 0; y = 0; }
void SetPoint(int x1, int y1) { x = x1; y = y1; }
void DisPoint() { cout << “x=” << x <<"," << “y=” << y << endl; }
};
int main()
{ Point P1;
P1.SetPoint(5, 12);
P1.DisPoint();
return 0;
}
上面程序的输出结果为:
x=5, y=12

3.若有以下程序:
#include <iostream.h>
class Sample
{ int n;
public:
Sample (int i) { n =i; }
void Add() { s += n; }
static int s;
void Dis() { cout << s << endl; }
};
int Sample:😒 = 0;
int main()
{ Sample a(2), b(5), c(8);
a.Add( );
b.Add( );
c.Dis( );
return 0;
}
上面程序的输出结果为:
7

4.若有以下程序:
#include <iostream.h>
class A
{ int a;
public:A(int aa = 0 )
{ a = aa;
cout << "A(): " << a << endl;
} };
class B: public A
{ int b;
public:
B(int aa = 0, int bb = 0): A(aa)
{ b = bb;
cout << "B(): " << b << endl;
}
};
int main()
{ B x(5), y(6,7);
return 0;
}
输出结果为:
A( ): 5
B( ): 0
A( ): 6
B( ): 7

5、
class Date
{ public:
Date(int,int,int);
Date(int,int);
Date(int);
Date();
void display();
private:
int month, day, year;
};
Date::Date(int m,int d,int y):month(m),day(d),year(y) { }
Date::Date(int m,int d):month(m),day(d) {year=2009;}
Date::Date(int m):month(m){day=1; year=2010; }
Date::Date( ) {month=1; day=1; year=2010; }
void Date::display(){ cout<<month<<"/"<<day<<"/"<<year<<endl; }
int main( )
{ Date d1(12,31,2009);
Date d2(12,31);
Date d3(1);
Date d4;
d1.display();
d2.display();
d3.display();
d4.display();
return 0;
}
输出结果为:

12/31/2009
12/31/2009
1/1/2010
1/1/2010

6、
#include
using namespace std;
class A
{ public:
A( ){cout<<"constructing A "<<endl;}
~A(){cout<<"destructing A "<<endl;}
};
class B: public A
{ public:
B( ){cout<<"constructing B "<<endl;}
~B(){cout<<"destructing B "<<endl;}
};
class C : public B
{ public:
C( ){cout<<"constructing C "<<endl;}
~C( ){cout<<"destructing C "<<endl;}
};

int main()
{ C c1;
return 0;
}
输出结果为:

constructing A
constructing B
constructing C
destructing C
destructing B
destructing A

四、程序填空
1.请完成下面的程序
#include // 预处理命令
using namespace std; // 使用标准命名空间std
class Test
{ private:
int a; // 数据成员
public:
Test(int x = 0){ (1) } // 构造函数
void Show( ){ cout << “a:” << a << endl; } // 显示数据成员之值
};
int main( ) // 主函数main(void)
{ Test obj(168); // 定义对象
(2) // 显示数据成员之值
return 0;
}

2.请完成下面的程序
#include // 预处理命令
using namespace std; // 使用标准命名空间std
class Complex
{private:
double realPart; // 实部
double imagePart; // 虚部
public:
Complex(double real = 0, double image = 0) // 构造函数
{ realPart=real;
imagePart=image;
}

double GetRealPart(   ) { return realPart; }		// 返回实部
double GetImagePart(   ){ return imagePart; }	// 返回虚部
Complex operator+(   Complex &a)		// 重载加法运算符+
{		return Complex(   (3)   );				// 返回和
}};

int main( ) // 主函数main(void)
{ Complex a(1, 2), b(2, 6), c; // 定义复数对象
(4) // 复数加法运算
cout << “a=” << a.GetRealPart() << “+” << a.GetImagePart() << “i” << endl; // 显示a
cout << “b=” << b.GetRealPart() << “+” << b.GetImagePart() << “i” << endl; // 显示b
cout << “c=” << c.GetRealPart() << “+” << c.GetImagePart() << “i” << endl; // 显示c
return 0; // 返回值0, 返回操作系统
}

参考答案:(1) a=x ; (2) obj.Show( );
(3) realPart + a.realPart, imagePart + a.imagePart (4) c=a+b;

五、程序设计题
1、构造一个rectangle的矩形类,包含数据成员,左下角点的坐标(x1,y1)与右上角点的坐标(x2,y2);包含成员函数getarea( )计算矩形的面积。完成类,并在主函数定义一个矩形对象,并计算输出该矩形对象的面积(10分)
#include
#include
using namespace std;
class rectangle //(2分)
{
private:
int x1,y1,x2,y2; // (2分)
public:
rectangle(int xx1,int yy1,int xx2,int yy2) //(1分)
{
x1=xx1;y1=yy1;x2=xx2;y2=yy2;
}
int getarea() //(2分)
{
return abs((x2-x1)*(y1-y2));
}
};

void main()
{
rectangle rect1(3,7,8,5); (2分)
cout<<rect1.getarea()<<endl; (1分)
}

2、定义一boat与car两个类,二者都有weight属性,定义二者的一个友元函数totalweight(),计算二者的重量和。(10分)
#include // 预处理命令
using namespace std; // 使用标准命名空间std
class car;(1分)
class boat{
private:
int weight; //(1分)
public:
boat(int w):weight(w){ } //(1分)
friend int totalweight(boat b1,car c1); //(2分)
};
class car{ /(1分)
private:
int weight; (1分)
public:
car(int w):weight(w){};
friend int totalweight(boat b1,car c1); (1分)
};
int totalweight(boat b1,car c1) //(1分)
{
return b1.weight+c1.weight;
}
void main()
{
car c1(1000);
boat b1(2000);
cout<<totalweight(b1,c1)<<endl;(1分)
}
3、设计一个汽车类vehicle,包含的数据成员有车轮个数wheels和车重weight。小车类car是它的派生类,其中包含载人数passenger_load。每个类都有相关数据的输出方法。在主程序中定义一个car类对象,对其车轮个数、车重、载人数进行设置并显示。(10分)

#include // 预处理命令
using namespace std; // 使用标准命名空间std
class vehicle // 定义汽车类 (3分)
{
protected:
int wheels; // 车轮数
float weight; // 重量
public:
vehicle(int wheels,float weight);
int get_wheels();
float get_weight();
float wheel_load();
void show();
};
class car:public vehicle // 定义小车类 (3分)
{
int passenger_load; // 载人数
public:
car(int wheels,float weight,int passengers=4);
int get_passengers();
void show();
};
vehicle::vehicle(int wheels1,float weight1) //(1分)
{
wheels=wheels1;
weight=weight1;
}
int vehicle::get_wheels()
{
return wheels;
}
float vehicle::get_weight()
{
return weight;
}
void vehicle::show() (1分)
{
cout << “车轮:” << wheels << “个” << endl;
cout << “重量:” << weight << “公斤” << endl;
}
car::car(int wheels, float weight, int passengers) :vehicle(wheels, weight)
{
passenger_load=passengers;
}
int car::get_passengers ()
{
return passenger_load;
}
void car::show()
{
cout <<" 车型:小车" << endl;
vehicle::show();
cout << “载人:” << passenger_load << “人” << endl;
cout << endl;
}
void main ()
{
car car1(4,2000,5); (1分)
cout << “输出结果” << endl;
car1. show (); (1分)
}
4.设计一个类DateInfo,要求其满足下述要求:
(1)要求有一个无参的构造函数,其初始的年、月、日分别为:2010,6,8。
(2)要求有一个带参数的构造函数,其参数分别对应年、月、日。
(3)要求用一个成员函数实现日期的设置。
(4)要求用一个成员函数实现输出日期。
要求用一个成员函数实现日期的获取。
#include
using namespace std;
class DateInfo
{ private: int year, month, day;
public: DateInfo(): year(2010), month(6), day(8){ }
DateInfo(int y, int m, int d): year(y), month(m), day(d){ }
void Set(int y, int m, int d)
{ year = y;
month = m;
day = d;
} void Show() { cout << year << “年” << month << “月” << day << “日” << endl; }
};
int main()
{ DateInfo d1, d2(1988, 8, 18);
d1.Show();
d2.Show();
d2.Set(1999, 9, 19);
d2.Show();
return 0;
}

5.设计一个类Rect,要求如下:
(1)该类中的私有数据成员length,width存放它的长和宽,并且设置它们的默认值是0。
(2)通过成员函数设置其长和宽,并确保长和宽都在(0,50)范围之内。
(3)实现求周长函数GetPerimeter()。
#include
using namespace std;
class Rect
{ private:
double length, width;
public:
Rect(double l = 0, double w = 0): length(l), width(w){ }
void Set(double l, double w)
{ if (length <= 0 || length >= 50 || width <= 0 || width >= 50 )
cout<<数据不在指定范围(0,50)!"; // 抛出异常
length = l;
width = w;
} double GetPerimeter() { return 2 * (length + width); }
};
int main( )
{ Rect obj(1, 8);
cout << “周长:” << obj.GetPerimeter() << endl;
return 0;
}

(提高题,扩展)6、编写程序,定义抽象基类Shape(形状),由它派生出2个派生类:Circle(圆形) 和Rectangle(矩形),用函数Show( )分别显示各种图形的相关信息,最后还要显示所有图形的总面积。
要求:
(1)从Shape类派生圆类(Circle)、矩形类(Rectangle),圆类新增数据成员半径(radius),矩形类新增数据成员边长(length)、宽(width),圆类和矩形类都有构造函数,显示数据成员值的函数和求面积发函数。
(2)写出main( )函数,计算半径为5.5的圆和边长为9.9的正方形的面积和。
#include // 预处理命令
using namespace std; // 使用标准命名空间std
const double PI = 3.1415926; // 定义常量PI
class Shape
{public:
Shape() { } // 构造函数
virtual ~Shape() { } // 析构函数
virtual Show() = 0; // 显示面积
static double totalArea; // 总面积
static void ShowTotalArea() { cout << “总面积:” << totalArea << endl; }
};
class Circle: public Shape
{private:
double radius; // 半径
public:
Circle(double r): radius® { totalArea += PI * r * r; } // 构造函数
~Circle() { } // 析构函数
virtual Show() { cout << “圆面积:” << PI * radius * radius << endl; }; // 显示面积
};
class Rectangle: public Shape
{private:
double length; // 长
double width; // 宽
public:
Rectangle(double l, double w): length(l), width(w){ totalArea += l * w; } // 构造函数
~Rectangle() { } // 析构函数
virtual Show() { cout << “矩形面积:” << length * width << endl; }; // 显示面积
};
double Shape::totalArea = 0; // 初始化totalArea
int main(void)
{ Circle c(1); // 定义圆对象
c.Show(); // 显示面积
Rectangle r(1, 2); // 定义矩形对象
r.Show(); // 显示面积
Shape::ShowTotalArea(); // 显示总面积
return 0; // 返回值0, 返回操作系统
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值