admin 管理员组

文章数量: 887019


2024年2月29日发(作者:制作网页用什么实现动态效果)

《C++程序设计》(高起专)练习题一

一、单项选择题

1. C++是一种( )的程序设计语言。

A. 面向对象 B. 即可面向过程,又可面向对象

C. 面向过程 D. 面向系统

2. 在下面有关析构函数特征的描述中,正确的是( )。

A. 一个类中可以定义多个析构函数 B. 析构函数名与类名完全相同

C. 析构函数不能指定返回类型 D. 析构函数可以有一个或多个参数

3. 下面对于友元函数描述正确的是( )。

A. 友元函数的实现必须在类的部定义

B. 友元函数是类的成员函数

C. 友元函数破坏了类的封装性和隐藏性

D. 友元函数不能访问类的私有成员

4. 下面描述中,表达错误的是( )。

A. 公有继承时基类中的public成员在派生类中仍是public的

B. 公有继承时基类中的private成员在派生类中仍是private的

C. 公有继承时基类中的protected成员在派生类中仍是protected的

D. 保护继承时基类中的public成员在派生类中是private的

5. 所谓多态性是指( )

A. 不同的对象调用不同名称的函数 B. 不同的对象调用相同名称的函数

C. 一个对象调用不同名称的函数 D. 一个对象调用不同名称的对象

6. 重载赋值操作符时,应声明为( )函数。

A. 友元 B. 虚 C. 成员 D. 多态

7. 下列对模板的声明错误的是( )。

A. template B. template

C. template < typename T> D. template

8. 下列类中( )不是输入流类istream的派生类。

A. ifstream ream C. iostream D. ofstream

9. ( )不是构造函数的特征。

A. 构造函数的函数名与类名相同 B 构造函数可以重载

C. 构造函数可以设置缺省参数 D构造函数必须指定类型说明

10. 下列语句中错误的是( )。

A. int *p=new int (10); B. int *p=new int[10];

C. int *p=new int; D. int *p=new int[40](0)

11. 下列关于虚基类的描述,错误的是( )

A. 设置虚基类的目的是为了消除二义性

B. 虚基类的构造函数在非虚基类之后调用

C. 若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用

D. 若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数

12. 已知:print( )函数是一个类的常成员函数,它无返回值,下列表示中,( )是正确的。

A. void print( ) const; B. const void print( );

C. void const print( ); D. void print(const);

13. 在下面有关静态成员函数的描述中,正确的是( )。

A. 在静态成员函数中可以使用this指针

B. 在建立对象前,就可以为静态数据成员赋值

C. 静态成员函数在类外定义时,要用static前缀

D. 静态成员函数只能在类外定义

14. 在下列关键字中,用于说明类中公有成员的是( )。

A. public B. private C. protected D. friend

15. 以下有关继承的叙述正确的是( )。

A. 构造函数和析构函数都能被继承

B. 派生类是基类的组合

C. 派生类对象除了能访问自己的成员以外,不能访问基类中的所有成员

D. 基类的公有成员一定能被派生类的对象访问

16. 下列各种高级语言中,不是面向对象的程序设计语言的是( )。

A. C++ B. Java C. VB D. C

17. 下列说法中正确的是( )。

A. 类定义中只能说明函数成员的函数头,不能定义函数体

B. 类中的函数成员可以在类体中定义,也可以在类体之外定义

C. 类中的函数成员在类体之外定义时必须要与类声明在同一文件中

D. 在类体之外定义的函数成员不能操作该类的私有数据成员

18. 静态数据成员的初始化必须在( )。

A. 类 B. 类外 C. 构造函数 D. 静态成员函数

19. 使用派生类的主要原因是( )。

A. 提高代码的可重用性 B. 提高程序的运行效率

C. 加强类的封装性 D. 实现数据的隐藏

20. 编译时的多态性通过使用( )实现。

A. 构造函数 B. 虚函数 C. 重载函数 D. 析构函数

21. 下列关于运算符重载的描述中,正确的是( )。

A. 可以改变运算符的目数 B. 可以改变运算符的优先级

C. 可以改变运算符的结合性 D. 可以改变运算符的功能

22. 如有以下模板类定义:

Template

class sum { T a, b;

Public:

sum (T x, T y); }

则在类体外定义构造函数正确的是( )。

A. template

sum::sum(T x,T y) { a=x; b=y; }

B. template

sum::sum(T x,T y) { a=x; b=y; }

C. template

sum::sum(T x,T y) { a=x; b=y; }

D. sum::sum(T x,T y) { a=x; b=y; }

23. 写一个 C++ 文件,要创建一个( )流对象。

A. ifstream B. ofstream C. cin D. cout

24. 下面有关重载函数的说法中正确的是( )。

A. 重载函数必须具有不同的返回值类型; B. 重载函数形参个数必须不同;C. 重载函数必须有不同的形参列表; D. 重载函数名可以不同;

25. 一个函数功能不太复杂但要求被频繁调用,应选用( )。

A. 联函数 B. 重载函数 C. 递归函数 D. 嵌套函数

26. 关于new运算符的下列描述中,( )是错的。

A. 它可以用来动态创建对象和对象数组

B. 使用它创建的对象和对象数组可以使用运算符delete删除

C. 使用它创建对象时要调用构造函数

D. 使用它创建对象数组时必须指定初始值

27. 可以用p.a的形式访问派生类对象p的基类成员a,其中a是( )。

A. 私有继承的公有成员 B. 公有继承的私有成员

C. 公有继承的保护成员 D. 公有继承的公有成员

28. 若有定义“int x=17;”,则语句“cout<

A. 11 B. 0x11 C. 21 D. 021

29. 已知f1和f2是同一类的两个成员函数,但f1不能直接调用f2,这说明( )。A. f1和f2都是静态函数 B. f1是静态函数,f2不是静态函数

C. f1不是静态函数,f2是静态函数 D. f1和f2都不是静态函数

30. 假设Sample是个类,则语句“Sample a[2],*p[3];”调用构造函数的次数为(

A. 0 B. 2 C. 3 D. 5

31. C++利用( )实现面向对象程序设计的封装性。

A. 构造数据类型——类 B. 构造数据类型——枚举

C. 类的派生机制 D. 函数重载与运算符重载

32. 在声明类时,下面的说确的是( )。

A. 可以在类的声明中给数据成员赋初值

B. 数据成员的数据类型可以是register

C. private、public、protected可以按任意顺序出现

D. 没有用private、public、protected定义的数据成员是公有成员

33. 假设已经有定义const char* const name="chen"; 下面的语句中正确的是( )。

A. name[3]= 'a'; B. name="lin";

C. name=new char[5]; D. cout<

34. 要将类A说明是类B的虚基类,正确的描述是 ( )

A. class virtual B:public A B. class B:virtual public A

C. virtual class B:public A D. class B:public A virtual

35. 下列关于纯虚函数的描述中,正确的是( )。

A. 纯虚函数是一种特殊的虚函数,它是个空函数

B. 具有纯虚函数的类称为虚基类

C. 一个基类中说明有纯虚函数,其派生类一定要实现该纯虚函数

D. 具有纯虚函数的类不能创建类对象

36. 能用友元函数重载的运算符是( )。

A.+ B.= C.[] D.->

37. 下面函数模板定义中不正确的是( )

A.template B.template

T F(T x){ return T+x; } T F(T x){ return x+x; }

C.template D.template

T F(T x){ return x*x;} T F(T x){ return x>1; }

二、判断题

1. 静态的成员函数没有隐含的this指针 ,所以它们只能访问静态的数据成员。( )

2. 通过类对象可以访问类中所有的成员。( )

3. 构造函数是可以被派生类继承的。( )

4. 构造函数和析构函数都可以是虚函数。( )

5. 只有类中全部函数都为纯虚函数时,该类才被称为抽象类。( )

6. 对于同一个运算符来说,重载的运算符的优先级比未重载的运算符的优先级高。( )

7. 一个类的友元一定是另一个类的成员函数。( )

8. C++中,对象保存在存中,栈存是自动分配和释放的,而堆存需要用户自己申请和释放。( )

9. C++不允许定义有默认参数的函数。( )

10. 构造函数和析构函数都不能重载。( )

11. 构造函数和析构函数都不可以由程序员调用,只能由系统自动调用。( )

12. 凡是用inline说明的函数一定是联函数。( )

13. 友元函数是独立于当前类的外部函数。( )

14. 静态成员函数与在一般的成员函数一样,都隐含有一个this指针。( )

15. C++编译器不能够区分重载的无参函数和缺省参数的函数。( )

16. 指针和引用都是变量,都占有单独的存空间。( )

17. 一个类可以定义多个构造函数和多个析构函数。( )

18. 构造函数是不能说明它的返回值类型的,但可以说明为void类型。( )

三、简答题

1. 什么是封装性?请举例说明。

2. 什么是函数重载和运算符重载?为什么要使用重载?

3. 拷贝构造函数在哪几种情况下被调用?

4. 什么是类?什么是对象?对象与类的关系是什么?

5. 什么是面向对象程序设计?

6. 什么是继承性?请举例说明。

7. 结构struct和类class有什么异同?

8. 在定义拷贝构造函数时,为什么通常还要定义一个重载的赋值运算符?

9. 什么是消息?消息具有什么性质?

10. 若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?

四、程序分析题

1. 指出下面程序中的1处错误,并说明原因。

#include

class Point

{

int X,Y;

public:

Point( ){X=0;Y=0;}

Point(int x=0,int y=0){X=x;Y=y;}

void display( ){cout<

};

void main()

{

Point p;

y();

}

答:

2. 指出下面程序中的1处错误,并说明原因。

#include

class CTest{

public:

CTest(){ x=20; }

private:

int x;

friend void friend_f(CTest fri);

};

void friend_f(CTest fri) { fri.x=55; }

void main()

{

CTest c1,c2;

_f(c2);

}

答:

3. 写出下面程序的运行结果。

#include

class Test

{

private:

int num;

public:

Test(int n=0){num=n;num++;}

~Test( ){cout<<”Destructor is active,number=”<

};

void main( )

{

Test x[2];

cout<<”Exiting main”<

}

答:

4. 写出下面程序的运行结果。

#include

class Test{

private:

static int val;

int a;

public:

static int func();

static void sfunc(Test &r);

};

int Test::val=20;

int Test::func()

{ val--; return val; }

void Test::sfunc(Test &r)

{ r.a=25; cout<<"Result3="<

void main()

{

cout<<"Resultl="<

Test a;

cout<<"Result2="<<()<

Test::sfunc(a);

}

答:

5.指出下列程序中的1处错误,并说明为什么。

#include

class Student{

char name[10];

int age;

float aver;

void printStu();

};

void main()

{

Student p1,p2,p3;

=30;

//…

}

答:

6.指出下列程序中的2处错误,并说明为什么。

#include

class Test{

public:

Test(int y=10){data=y;}

int getData() const {return ++data;}

static int getCount()

{

cout<<"Data is "<

return count;

}

private:

int data;

static int count;

};

答:

7.写出下列程序的运行结果。

#include "iostream.h"

class test

{

private:

int num;

float fl;

public:

test( );

int getint( ){return num;}

float getfloat( ){return fl;}

~test( );

};

test::test( )

{

cout << "Initalizing default" << endl;

num=0;fl=0.0;

}

test::~test( )

{

cout << "Destructor is active" << endl;

}

void main( )

{

test array[2];

cout << array[1].getint( )<< " " << array[1].getfloat( ) <

}

答:

8.写出下面程序的运行结果

#include

class A

{

int a;

public:

A(int aa=0){a=aa;cout<<"a="<

};

class B

{

int b;

public:

B(int bb=0){b=bb;cout<<"b="<

};

class C:public B

{

A a;

public:

C( ){cout<<”C default constructor”<

C(int i,int j):a(i),B(j){cout<<”C constructor”<

};

void main( )

{

C c1,c2(5,6);

}

答:

9. 写出下面程序的输出结果。

#include

class A

{

private:

static int n;

int X;

public:

A(int x=0) { X=x; n++; }

~A() { n-- ; }

static int GetNum(){ return n; }

void print();

};

void A::print() { cout <<"n=" << n << ", X=" << X<< endl; }

int A::n = 0;

void main()

{

A *p=new A(12);

p->print();

A a(34);

();

delete p;

cout <<"n=" << A::GetNum() << endl;

}

答:

10. 写出下面程序的运行结果。

#include

class A

{

public:

int n;

};

class B:virtual public A{};

class C:virtual public A{};

class D:public B,public C

{

int getn(){return B::n;}

};

void main()

{

D d;

d.B::n=10;

d.C::n=20;

cout<

}

答:

五、完成程序题

1. 请在横线处填上适当的字句,以使程序完整。

#include

#include ″math.h″

class Point

{

private:

double X,Y;

①____ ______Line;

public:

Point(double x=0, double y=0)

{ X=x; Y=y; }

Point(Point &p)

{ X=p.X; Y=p.Y; }

};

class Line

{

private:

Point p1,p2;

public:

Line(Point &xp1, Point &xp2): ②___ _______{}

double GetLength();

};

double Line::GetLength()

{

double dx=p2.X-p1.X;

double dy=p2.Y-p1.Y;

return sqrt(dx*dx + dy*dy);

}

void main()

{

Point p1,p2(3,4);

Line L1(p1,p2);

cout<

}

2. 设计一个立方体类Box,使它能计算并输出立方体的体积和表面积。

要求:

Box类包含三个私有数据成员:a(立方体边长)、volume(体积)和area(表面积);

Box类包含有构造函数及seta()(设置立方体边长)、getvolume()(计算体积)、getarea()(计算表面积)和disp()(输出体积和表面积)。

3. 下面程序中A是抽象类,为使其输出是:

This is class B printing.

This is class C printing.

请在横线处填写适当容,以使程序完整。

#include

class A{

public:

①____ ____;

};

class B: public A{

public:

void printMe() {cout <<"This is class B printing. "<

};

class C: public B {

void printMe() {cout <<"This is class C printing. "<

};

void print (②__ ______)

{

e();

}

void main ()

{

B b;

C c;

print (b); print (c);

}

4. 设计一个复数类Complex,包含实部real和虚部image两个私有数据成员,另有一个重载运算符“+”(用成员函数实现),以实现求两个复数对象之和,和一个重载运算符“<<”,以实现输出复数类的对象。在主程序中用实例进行测试。

5. 请在下面程序的横线处填上适当容,以使程序完整。

#include

#include

class Person

{

char name[20];

public:

Person(char* s){strcpy(name,s);}

void display( ){cout<<”Name:”<

};

class Student:public Person

{

int grade;

public:

Student(char* s, int g): ① {grade=g;}

void display( )

{

② ;

cout<<”Grade:”<

}

};

void main( )

{

Student s(“周山”,90);

y( );

}

《C++程序设计》(高起专)练习题二

一、单项选择题

1.将客观实体的特征与行为作为不可分割的整体进行程序设计的方法称为( )程序设计。

A. 面向应用 B. 面向过程 C. 面向对象 D. 面向系统

2.构造函数是在( )时被执行的。

A. 程序编译 B. 创建对象 C. 创建类 D. 程序装入存

3.静态成员函数仅能访问( )。

A .静态的数据成员 B. 非静态的成员函数 C. 非静态的数据成员 D. 以上都不对

4.要将类A说明是类B的虚基类,正确的描述是( )。

A. class virtual B:public A B. class B:virtual public A

C. virtual class B:public A D. class B:public A virtual

5.以下基类中的成员函数中表示纯虚函数的是( )。

A. virtual void vf(int); B. virtual void vf(int)=0;

C. virtual void vf(int=0); D. virtual void vf(int){ };

6.如有以下函数模板:

T min(T a,T b)

{ return a

则函数调用 min(100,’b’); 返回的结果是( )。

A. 100 B. 98 C. b D. d

7.下列格式控制符中不是定义于iostream.h中的是( )。

A. endl B. hex C. flush D. setw

8.在类的定义中,用于为对象分配存空间、对类的数据成员进行初始化并执行其他部管理操作的函数是( )。

A.友元函数 B.虚函数 C.构造函数 D.析构函数

9.下面的类型声明中正确的是( )。

A. int &a[4]; B. int &*p; C. int & &q; D. int

I,*pp=&I;

10.下面对类的构造函数的定义正确的是( )。

A. void X::X( 参数 ) B. X::X( 参数 )

C. int X::X( 参数 ) D. float X::X( 参数 )

11.当一个函数无返回值时,函数的类型应定义为( )。

A. void B. 任意 C. int D. 无

12.已知类A是类B的友元,类B是类C的友元,则( )

A. 类A一定是类C的友元

B. 类C一定是类A的友元

C. 类C的成员函数可以访问类B的对象的任何成员

D. 类A的成员函数可以访问类B的对象的任何成员

13.执行下面的程序将输出( )

A.XY B. YX C. X D. Y

#include

class BASE{

char c;

public:

BASE(char n):c(n){}

~BASE(){cout<

};

class DERIVED:public BASE{

char c;

public:

DERIVED(char n):BASE(n+1),c(n){}

~DERIVED(){cout<

};

int main()

{ DERIVED(‘X’);

return 0;

}

14.能用友元函数重载的运算符是( )。

A.+ B.= C.[] D.->

15.( )是析构函数的特征。.

A. 一个类中只能定义一个析构函数 B. 析构函数在对象创建时调用

C. 析构函数的定义只能在类体 D. 析构函数可以有一个或多个参数

16.C++利用( )实现面向对象程序设计的继承性。

A. 构造数据类型——类 B. 类的派生机制

C. 构造数据类型——枚举 D. 函数重载与运算符重载

17.在下面有关对构造函数的描述中,正确的是( )。

A. 构造函数可以带有返回值 B. 构造函数的名字与类名完全相同

C. 构造函数必须带有参数 D. 构造函数必须定义,不能缺省

18.关于成员函数特征的下述描述中,( )是错误的。

A. 成员函数一定是联函数 B. 成员函数可以重载

C. 成员函数可以设置参数的缺省值 D. 成员函数可以是静态的

19.能用友元函数重载的运算符是( )。

A.[] B.= C.+ D.->

20.关于虚函数的描述中,( )是正确的。

A. 虚函数是一个static类型的成员函数

B. 虚函数是一个非成员函数

C. 基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数

D. 派生类的虚函数与基类的虚函数具有不同的参数个数和类型

21.下列语句中不存在类型转换的是( )。

A. int(1.1); B. (double)2.2; C. int i=1; D. char c=97;

22.定义类模板时要使用关键字( )。

A.const B.new C.delete D.template

23.下列不是文件流类的是( )。

A. ifstream B. iostream C. fstream D. ofstream

24.下面对静态数据成员的描述中,正确的是( )。

A. 静态数据成员可以在类体进行初始化

B. 静态数据成员不可以被类的对象调用

C. 静态数据成员不受private控制符的限制

D. 静态数据成员可以直接用类名调用

25.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是( )。

A. 派生类的对象可以赋给基类的对象

B. 派生类的对象可以初始化基类的引用

C. 指向派生类对象的基类指针可以直接访问派生类中的成员

D. 派生类的对象的地址可以赋给指向基类的指针

26.以下基类中的成员函数中表示纯虚函数的是( )。

A. virtual void vf(int); B. virtual void vf(int)=0;

C. virtual void vf(int=0); D. virtual void vf(int){ };

27.下面关于运算符重载的描述错误的是( )。

A. 重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构

B. 不是所有的运算符都可以进行重载

C. 运算符函数的调用必须使用关键字operator

D. 在C++语言中不可通过运算符重载创造出新的运算符

28.设有函数模板

template

Q Sum(Q x,Q y){ return (x)+(y); }

则下列语句中对该函数模板错误的使用是( )。

A. Sum(10,2); B. Sum(5.0,6.7);

C. Sum(15.2f,16.0f); D. Sum(″AB″,″CD″);

29.如果编程者没有显式定义构造函数(包括复制构造函数),C++编译器就( )。

A. 出现编译错误 B. 没有构造函数 C. 必须显示定义 D. 隐式定义缺省的构造函数

30.假设已经有定义char*const name="chen"; 下面的语句中正确的是( )。

A. name[3]= 'q'; B. name="lin";

C. name=new char[5]; D. name=new char ('q') ;

31.实现以读方式打开文件“D:”,以下不能实现目的的语句是( )。

A. ifstream inf("D:File txt",ios::in);

B. ifstream inf("D:");

C. istream inf("D:",ios::out);

D. fstream inf("D:",ios::in|ios::out);

32.下列不是描述类的成员函数的是( )

A.构造函数 B.析构函数 C.友元函数 D.拷贝构造函数

33.所谓多态性是指( )

A. 不同的对象调用不同名称的函数 B. 不同的对象调用相同名称的函数

C. 一个对象调用不同名称的函数 D. 一个对象调用不同名称的对象

34.类Point的拷贝构造函数是 ( )

A. Point() B. Point(Point*) C. Point(Point&) D.

Point(Point)

35.下面关于静态成员的描述中,正确的是( )

A. 静态数据成员是类的所有对象共享的数据

B. 类的每个对象都有自己的静态数据成员

C. 类的不同对象有不同的静态数据成员值

D. 静态数据成员不能通过类的对象访问

36.在下面有关友元函数的描述中,正确的说法是( )。

A. 友元函数是独立于当前类的外部函数 B. 一个函数不能同时定义为两个类的友元函数

C. 友元函数必须在类的外部定义 D. 在外部定义友元函数时,必须加关键字friend

37.下面对类的析构函数的定义是( ) 。

A. X::~ X( 参数 ); B. void X::~ X( 参数 ); C. void X::~ X(); D. X::~

X();

38.假定一个类的构造函数为“A(int aa=1, int bb=0) {a=aa; b=bb;}”, 则执行“A x (4);”语句后,x.a和x.b的值分别为( )。

A.1和0 B.1和4 C.4和0 D.4和1

二、判断题

1.当一个函数无返回值时,函数的返回类型应为void。( )

和delete运算符可以被重载。( )

3.在默认参数函数的原型中,所有取缺省值的参数都必须出现在不取缺省值的参数的左边。( )

4.数组中的每个元素它们的类型可以是不同的。( )

5.在C++中,用数组、指针、和引用作为函数参数,都能够将参数值带回。( )

6.类中可以包含各种数据类型的数据成员,但不能有其他类对象。( )

7.一个类的友元一定是另一个类的成员函数。( )

8.常量和引用在声明时必须初始化。( )

9.无论何时编译器都为类构造一个无参数的缺省的构造函数。( )

10.拷贝构造函数使用本类对象的指针作为参数初始化新创建的对象。( )

11.构造函数和析构函数都与类同名。( )

12.不能在类声明中给数据成员赋初值。( )

13.成员函数体写在类外部的一定不是联函数,写在类部的一定是联函数。( )

14.构造函数和析构函数都可以是虚函数。( )

15.运算符=、()、[]、->不能用友元方式重载。( )

16.虚基类中的成员函数都是虚函数。( )

17.如果一个类至少有一个虚函数,那么该类就被称为抽象类。( )

三、简答题

1.什么是类?什么是对象?对象与类的关系是什么?

2.什么是多态性?请举例说明。

3.虚函数是否一定要有virtual关键字?什么叫纯虚函数和抽象类?多态调用需要满足怎样的条件?

4.简述结构化的程序设计、面向对象的程序设计的基本思想。

5.什么是面向对象程序设计?

6.什么是继承性?请举例说明。

7.结构struct和类class有什么异同?

8. 虚析构函数有什么作用?

9.什么是类?什么是对象?对象与类的关系是什么?

10.结构struct和类class有什么异同?

四、程序分析题

1. 指出下列程序中的1处错误,并说明为什么。

class Location {

int X,Y=20;

protected:

int zeroX,zeroY;

int SetZero(int ZeroX,int ZeroY);

private:

int length,height;

public:

void init(int initX,int initY);

int GetX( );

int GetY( );

};

答:

2.指出下列程序中的1处错误,并说明为什么。

#include

#include

class CTest{

public:

const int y2;

CTest(int i1, int i2,int i3):y1(i1),y2(i2)

{ x=i3; }

int show() const{cout<<"y1="<

//…

private:

int x;

const int y1;

};

void main()

{

CTest c(1,2,3);

();

c.y2 = -2;

();

}

答:

3.写出下面程序的输出结果。

#include

class B

{ int b;

public:

B(int i) {b=i;}

virtual void virfun() {cout<< "B::b: "<

};

class D: public B

{ public:

D(int i,int j): B(i) {d=j;}

void virfun() {B::virfun(); cout<<"D::d: "<

private: int d;

};

void fun(B *objp) { objp->virfun(); }

void main() { D *pd=new D(3,5) ; fun(pd);}

答:

4. 写出下面程序的运行结果。

#include

class example

{

public:

example(int n)

{

i=n;

cout<<"Constructingn";

}

~example()

{ cout<<"Destructingn"; }

int get_i()

{ return i; }

private :

int i;

};

int sqr_it(example o)

{ return _i()*_i(); }

main ()

{

example x(10);

cout<<_i()<

cout<

return 0;

}

答:

5. 指出下列程序中的1处错误,并说明为什么。

#include

class Stack{

public:

Stack(int sz);

private:

char *p;

int size;

};

Stack::Stack(int sz)

{

p=new char[size=sz];

}

void main()

{

Stack stt;

//…

}

答:

6.指出下列程序中的1处错误,并说明为什么。

#include

class shape {

public:

int area () {return 0;}

};

class rectangle: public shape {

public:

int a, b;

void setLength (int x, int y) {a=x; b=y;}

int area () {return a*b; }

};

void main () {

rectangle r;

gth (3,5);

shape* s=&r;

cout << () <

cout << () <

}

答:

7. 写出下面程序的输出结果。

#include

class MyClass {

public:

int number;

void set(int i);

};

int number=3;

void MyClass::set(int i) { number=i; }

void main()

{

MyClass my1;

int number=10;

(5);

cout<<<

(number);

cout<<<

(::number);

cout<<;

}

答:

8. 写出下面程序的运行结果

#include

class Sample

{

int x,y;

public:

Sample(){x=y=0;}

Sample(int i,int j){x=i;y=j;}

void copy(Sample &s);

void setxy(int i,int j){x=i;y=j;}

void print(){cout<<"x="<

};

void Sample::copy(Sample &s)

{ x=s.x;y=s.y; }

void func(Sample s1,Sample &s2)

{

(10,20);

(30,40);

}

void main()

{

Sample p(1,2),q;

(p);

func(p,q);

();

();

}

答:

9. 指出下列程序中的错误,并说明原因。

class A {

int a,b;

public:

A(int aa=0, int bb)

{

a=aa; b=bb;

}

};

答:

10. 指出下面程序中的错误,并说明原因。

#include

class CTest{

public:

CTest() { x=20; }

void use_this(int);

private:

int x;

};

void CTest::use_this(int x)

{

this.x=x;

cout<<"x="<

}

void main()

{

CTest y;

_this(10);

}

答:

五、完成程序题

1.请在下面程序的横线处填上适当容,以使程序完整,并使程序的输出为5。

#include

class Integer

{

int x;

public:

Integer(int a=0){x=a;}

void display( ){cout<

① ;

};

Integer Max(Integer a,Integer b)

{

if(② )

return a;

return b;

}

void main( )

{

Integer a(3),b(5),c;

c=Max(a,b);

y( );

}

2. 设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求两个三角形对象的面积之和。

3. 请在下面程序的横线处填上适当容,以使类定义完整。

class base{

protected:

int a;

public:

base () {a=0;}

base (int i) {a=i;}

base (base& b) {a=b.a;}

};

class derived:public base {

private:

int d;

public:

derived () {d=0;}

derived (int i, int j) : ① _____{d=j;}

derived (derived& b): ②_____ ___{d=b.d;}

};

4. 编写一个对具有n 个元素的数组x[]求最大值的程序,要求将求最大值的函数设计成函数模板。

5. 编写一个程序,设计一个圆类circle和一个桌子类table,另设计一个圆桌类roundtable,它是从前两个类派生的,要求输出一个圆桌的高度、面积和颜色等数据。

提示:

circle类包含私有数据成员radius和求圆面积的成员函数getarea();

table类包含私有数据成员height和返回高度的成员函数getheight()。

roundtable类继承所有上述类的数据成员和成员函数,添加私有数据成员color和相应的成员函数。


本文标签: 函数 成员 对象 程序 重载