c++面向对象复习题答案版

更新时间:2024-05-03 19:17:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第 1 页 共 22 页

一、 填空题

1.C++中有两种数据类型: ( char )和 ( int long )可以使用signed修饰符。 在C++中,用数组、指针、和( 引用 )作为函数参数,能够将参数值带回。

2.为了降低函数调用的时间开销,建议将小的调用频繁的函数定义为(内联函数 ),方法是在函数类型前加上(inline)关键字。

3.面向对象的程序设计有四大特征,它们是抽象、封装、( 继承 )、( 多态 )。

4.拷贝构造函数是在用一个对象初始化另一个对象时被调用,系统缺省的拷贝构造函数的工作方法是( 把对象的每个数据成员的值都复制到新建立的对象中)。

5.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到(该类的)构造函数,否则应用程序会产生一个编译错误。

6.静态数据成员必须在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象( 共享 )。

7.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型( 不同 )。 8.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的( 封装 )特性。

9.预编译指令由三种,它们是:文件包含、 ( 宏定义 )和 ( 条件编译 )。

10.静态的成员函数没有隐含的 ( this ),所以,它们只能直接访问类的静态的数据成员。 11.在C++中,函数的参数有两种传递方式,它们是值传递和( 地址 )。 12.当非静态成员函数被调用时,该成员函数的( this )指向调用它的对象。 13.拷贝构造函数使用( 引用 )作为参数初始化创建中的对象。 14.在公有继承的情况下,基类数据成员在派生类中的访问权限( 不变 )。 15.在C++中,构造派生类对象时,总是先从( 基类 )的初始化开始的。

16.当需要统计程序中某个类创建对象的个数时,需要给该类定义(静态数据)成员。 17.在多个类之间有重复继承时,为避免被重复继承的基类数据成员在内存中有多个拷贝,应将该基类定义为( 虚基类 )。

18.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为( 抽象类 ),定义该类至少具有一个( 纯虚函数 )。

19.在C++中构造一个对象时,其数据成员在构造函数中初始化。对于内嵌的对象、 ( 常量 )、 ( 引用 )数据成员需要在构造函数的成员初始化列表中初始化。

20.在类的定义中,说明为protected的数据成员称为保护成员。保护数据成员具有双重作用:对于其派生类而言, ( 可以访问 );而对于其外部的程序而言, ( 不可以访问 )。 21.控制格式输出的

操纵符中,(setprecision)是设置数据精度的,( hex )是设置十六进制的。 22.如果s是int型变量,且s=6,则下面s%2+(s+1)%2表达式的值为__0_ _。 23.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+4’的值为_e_ __。

24.数组与函数参数联系密切,当用数组元素作函数参数时,这是属于值传递;当数组名作为参数时,这是属于 地址 传递,对形参的改变可影响到实参。

第 2 页 共 22 页

25.利用“对象名.成员变量”形式访问的对象成员仅限于被声明为 公有 的成员;若要访问其他成员变量,需要通过 公有 函数或友元函数函数。

26.一个__类____和__对象___的关系,正如基本数据类型与该类型的变量一个。 27.类成员的默认访问方式是_私有的_____.

28.一个类有_多个____个构造函数,有_一个____析构函数。 29.类的__静态___成员函数不能对类中的非静态成员进行默认访问。

30.如果说明类B是类A的友元类,则类B的所有成员函数都是类A的_友元函数 _____。 31.利用成员函数对二元运算符重载,其左操作数为 对象  ,右操作数为 实际参数 。

32.类有两种用法:一种是类的实例化,即生成类的__模板类____ ;另一种是通过__基类_____派生出新的类。

33.运算函数中的关键字是_ _ operator ____,它和运算符一起组成该运算符函数的函数名。 34.如果一个类中有一个或多个纯虚函数,则这个类称为_ _抽象类____。 35.文件的打开是通过使用类_ _ _对象_____的成员函数来实现的。

36.设所有变量均为整型,则表达式(e=2,f=5,e++,f++,e+f)的值为_9___。 37.已知c的ASCII码为十进制数99,设k为字符型变量,则表达式k=‘c’+1的值为___d_____。

38.函数的形参在未被调用之前 不被 分配空间,函数的形参的类型 要和实参的相同。

39.类的成员分为数据成员和_ _ _成员函数____。 40.类完成了面向对象程序设计的_抽象____特性。

41.构造函数是_对象_____被创建时自动执行,对象消失时自动执行的成员函数称为__析构_____对象

43.在继承机制下,当对象消亡时,编译系统先执行 派生类 的析构函数,然后才执行派生类中子对象类的析构函数,最后执行 基类 的析构函数。 44.类的__静态_____数据成员是类所有对象共享的成员。 45.友元函数__不是____类的成员函数。(是/不是)

46.如果类A继承了类B,则类A称为__派生类_____,类B称为__基类_____。 47.运算符重载后,原运算符的优先级和结合特性__不会___改变。(会/不会)

48._纯虚函数_____是一个在基类中说明的虚函数,但未给出具体的实现,要求在其派生类实现。

49.文件的关闭是通过通过使用类________的成员函数________来实现的。(去掉)

二、选择题

1.面向对象的( B )是一种信息隐蔽技术,目的在于将对象的使用者与设计者分开。不允许使用者直接存取对象的属性,只能通过有限的接口与对象发生联系。 A.多态性 B.封装性 C.继承性 D.重用性

第 3 页 共 22 页

2.C++的合法注释是( B )。

A./*This is a C program/* B.// This is a C program C. “This is a C program” D./*This is a C program// 3.关于C++和C语言的描述中,( C )是错误的?

A.C是C++的一个子集 B. C程序在C++环境可以运行 C. C++程序在C环境可以运行 D. C++是面向对象的而C是面向过程的 4.运算符 +、<=、=、% 中,优先级最低的运算符是( C )。 A. + B.<= C.= D.%

5.已知a=4,b=6,c=8,d=9,则“(a++,b>a++&&c>d)?++d:a

B.do…while结构中的语句至少执行一次

C.while结构中的语句至少执行一次 D.条件成立时,它们有可能一次也不执行 7.对中断语句的说法下面不正确的是( B )。

A.用户可以指定中断的位置 B.用户可以指定转移的位置 C.break语句可以跳出本循环 D.continue语句可以结束本次循环 8.以下正确的说法是(D)。

A.用户若需要调用标准函数,调用前必须重新定义 B.用户可以直接调用所有标准库函数

C.用户可以定义和标准库函数重名的函数,但是在使用时调用的是系统库函数 D.用户可以通过文件包含命令将系统库函数包含到用户源文件中,然后调用系统库函数 9.下列哪个不是重载函数在调用时选择的依据(D )。

A.参数类型 B.参数个数 C.函数类型 D.函数名 10.对数组名作函数的参数,下面描述正确的是(B)。 A.数组名作函数的参数,调用时将实参数组复制给形参数组 B.数组名作函数的参数,主调函数和被调函数共用一段存储单元 C.数组名作参数时,形参定义的数组长度不能省略 D.数组名作参数,不能改变主调函数中的数据 11.如果x是整型变量,则合法的形式是( D )。 A.&(x+5)

B.*x

C.&*x

D.*&x

12.在定义一个共用体变量时,系统为其分配存储空间的原则是(B )。

A. 按所有成员需要的存储空间总和分配。B. 按成员中占存储空间最大者分配。 C. 按成员占存储空间最小者分配。 D.按第一个成员所需的存储空间分配。 13.下面( B )项是对构造函数和析构函数的正确定义。 A.void X::X(), void X::~X() B.X::X(参数), X::~X() C.X::X(参数), X::~X(参数) D.void X::X(参数), void X::~X(参数)

第 4 页 共 22 页

14.拷贝构造函数具有的下列特点中,( D )是错误的。

A. 如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的 B. 拷贝构造函数只有一个参数,并且是该类对象的引用 C. 拷贝构造函数是一种成员函数 D. 拷贝构造函数的名字不能用类名 15.类的析构函数的作用是( D )。

A.一般成员函数 B.类的初始化 C.对象初始化 D.删除对象 16.下列对派生类的描述中,( D )是错误的。 A.一个派生类可以作为另一个派生类的基类 B.派生类至少有一个基类

C.派生类的成员除了它自己的成员外,还包含了它的基类成员 D.派生类中继承的基类成员的访问权限到派生类保持不变

17.继承具有( B, C ),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。

A规律性 B.传递性 C.重复性 D.多样性 18.C++类体系中,能被派生类继承的是( A,B,C )。

A.构造函数 B.虚函数 C.析构函数 D.友元函数 19.下列关于动态联编的描述中,错误的是(D)。 A.动态联编是以虚函数为基础

B.动态联编是运行时确定所调用的函数代码的 C.动态联编调用函数操作是指向对象的指针或对象引用 D.动态联编是在编译时确定操作函数的

20.关于纯虚函数和抽象类的描述中,错误的是( C )。 A.纯虚函数是一种特殊的虚函数,它没有具体的实现 B.抽象类是指具有纯虚函数的类

C.一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类 D. 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 21.C++源文件的扩展名为( A )。

A.cpp B.c C.txt D.exe 22.在C++语言中,( A )的陈述是正确的。

A.能使用关键字并区分大小写 B.能使用关键字并不区分大小写 C. 不能使用关键字并区分大小写 D.不能使用关键字并不区分大小写 23.运算符+、=、*、>=中,优先级最高的运算符是( C )。

A.+ B.= C.* D.>= 24.下列不合法的变量名为(A )。

A.int B.int1 C.name_1 D.name0

25.已知x=43,ch=‘A’,y=0;则表达式(x>=y&&ch<’B’&&!y)的值是( C )。

A.0 B.语法错 C.1 D.“假”

第 5 页 共 22 页

A.语句for(i=0;;i++)表示无限循环 B.for(;;)表示无限循环 C.for()也表示无限循环 D.while(1)表示无限循环

26.以下不正确的是(c)。?

27.在函数的返回值类型与返回值表达式的类型的描述中,错误的是( B,D )。 A. 函数返回值的类型是在定义函数时确定,在函数调用时是不能改变的 B. 函数返回值的类型就是返回值表达式的类型

C. 函数返回值表达式类型与返回值类型不同时,函数表达式类型应转换成返回值类型 D. 函数返回值类型决定了返回值表达式的类型

28.如果一个函数无返回值,定义时它的函数类型应是(C)。

A.任意 B.int C.void D.无 29.在C++语言中,关于参数默认值的描述正确的是(A,B)。

A.只能在函数定义时设置参数默认值 B.设置参数默认值时,应当从右向左设置 C.设置参数默认值时,应当全部设置

D.设置参数默认值后,调用函数不能再对参数赋值 30.若有以下定义,则说法错误的是( D )。 int a=100,*p=&a ;

A.声明变量p,其中*表示p是一个指针变量 B.变量p经初始化,获得变量a的地址 C.变量p只可以指向一个整形变量 D.变量p的值为100

31.列关于结构体的说法错误的是(D )。

A.结构体是由用户自定义的一种数据类型 B.结构体中可设定若干个不同数据类型的成员

C.结构体中成员的数据类型可以是另一个已定义的结构体 D.在定义结构体时,可以为成员设置默认值 32.下列有关类的说法不正确的是( C )。

A. 对象是类的一个实例

B. 任何一个对象只能属于一个具体的类 C. 一个类只能有一个对象

D. 类与对象的关系和数据类型与变量的关系相似 33.( C )的功能是对象进行初始化。

A.析构函数 B. 数据成员 C.构造函数 D.静态成员函数 34.关于友元的描述中,( A )是错误的。

A. 友元函数是成员函数,它被说明在类体内 B. 友元函数可直接访问类中的私有成员 C. 友元函数破坏封装性,使用时尽量少用 D. 友元类中的所有成员函数都是友元函数

第 6 页 共 22 页

35.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问

权限定义为(A,B,C )。

A.public B. protected C.private D. static 36.派生类的对象对它的( A,B,D )是可以访问的。

A.公有继承的基类的公有成员 B. 公有继承的基类的保护成员 C. 公有继承的基类的私有成员 D. 保护继承的基类的公有成员 37.多继承派生类构造函数构造对象时,(B )被最先调用。

A.派生类自己的构造函数 B.虚基类的构造函数

C.非虚基类的构造函数 D.派生类中子对象类的构造函数 38.C++类体系中,不能被派生类继承的有(C )。

A.构造函数 B.虚函数 C.静态成员函数 D.赋值操作函数 39.编译时的多态性可以通过使用(A,D )获得。

A.虚函数和指针 B.重载函数和析构函数 C.虚函数和对象 D.虚函数和引用 40.下列描述中,( A )是抽象类的特征。

A.可以说明虚函数 B.可以进行构造函数重载 C.可以定义友元函数 D.不能说明其对象

三、指出并改正下列程序段中的语法错误。

题目 1. float x=3.26f; int &ref1=x;// float 2. int d1=3, d2=2; int * const dp=&d1; dp=&d2; *dp=5; 3.类型不一致 1.类型不一致 答案 2.常指针 3. //Nums为已定义的类 Nums *fp; fp=new int[4]; 4. void func(int first, int 2_secnd); 5. void Pixel::operator=(Pixel &p1, Pixel &p2); 4.标识符得字母开头 5.“=”运算符重载函数返回类型不对 第 7 页 共 22 页

6.//Pixel有两个整型成员x和y Pixel Pixel::operator+=(Pixle&p)const { x+=p.x;y+=p.y; return *this; } 2、指出并改正下列程序段中的语法错误。

题目 1. int x=13; const int &ref=x; ref=10; 2. double *fp; fp=new int(3); 6.在这里this是指向常量的常指针 答案 1.常引用不能赋值了 2.类型不一致 3. void func( first, int secnd); 4. //Pixel有两个整型成员x和y,其拷//贝构造函数定义如下: void Pixel(const Pixle& p); 3. first不是类型说明 4.不能有“void” 5. 5.不能定义友元函数,只能是成员函数。 friend Pixel & operator=(Pixel &p1, Pixel&p2); 6. //Pixel有两个整型成员x和y Pixel Pixel::operator++(int) { Pixel temp; temp=*this; x++; y++; return *this;temp; } 四、程序填空

1.编写函数将字符串按逆序存放。 #include #include #include void main() { int i,n;

6. 第 8 页 共 22 页

}

char s[100],temp;

cout<<\ (1) get(s); n= (2) strlen(s); for(i=0;i

{ temp=s[i];s[i]=s[n-i-1]; s[n-i-1]=temp; } cout<<\puts(s);

2.下列程序定义了类Pixel,请完成前置++和后置++的运算符函数的定义。 class Pixel{ };

Pixel Pixel::operator ++() { }

Pixel Pixel::operator ++(int) { }

void Pixel::display() { }

3. 根据给定的程序执行结果,将下列程序补充完整。 #include class Base{ public:

( 6 )Base(){ cout<<” Delete Derived”<

( 4 )Pixel temp=*this; x++;

y++;

return ( 5 ) temp;

x++; y++;

return (3) *this int x,y;

Pixel(int xx=0,int yy=0){ x=xx; y=yy; } Pixel operator ++(); Pixel operator ++(int); void display(); public:

第 9 页 共 22 页

};

class Derived:public Base{ public: }; void main() { }

程序的执行结果如下: Delete Derived Delete Base

4.定义一个字符串类String,有两个私有数据成员:char* content和int len;要求

1)在构造函数中提示用户输入字符串,;

2) 用户能提取和显示字符串;(分别由两个函数完成) 3)实现对字符串中所有小写字母变成大写,并显示。 注意内存的分配与释放。

类定义的部分代码如下,请补充代码使类的定义完整。 #include #include #include class String{ };

String::String(){

char ch[50];//?

cout<<\cin>>ch; char* content; int len; String(); Base *p1= ( 8 )new Derived ; delete p1;

( 7 )Derived (){cout<<” Delete Base”<

public:

~String(){ ( 1 ) delete content[]; } void display(); void upper_str();

char* get_str() const{ ( 2 ) return content; } 第 10 页 共 22 页

}

len=strlen(ch); content= ( 3 )new char[50]; if(!content) { }

cout<<\exit(1);

strcpy(content,ch);

cout<

void String::display(){ void String::upper_str(){ }

for (int i=0;i

if ( 4 )(’a’<= content[i]&& content[i] <=’z’) content[i]= ( 5 ) content[i]+32; 5. 下列程序定义了类Point,请完成前置--和后置--的运算符函数的定义。 class Point{ };

Point Point::operator --() { }

Point Point::operator --(int) { }

void Point::display() {

cout<<\

( 7 ) Point temp;temp=*this; x--;

y=y--;

( 8 )return temp; x--;

y--;

return ( 6 )*this; float x,y;

Point(float xx=0,float yy=0){ x=xx; y=yy; } Point operator --(); Point operator --(int); void display(); public:

第 11 页 共 22 页

}

6、程序填空,直接将答案写在空行上 1. __#incolude _//_1_ class A{ int a; public: A(int i){a=i;} void print(){cout< #include 5 class Complex{ double real,image; public: Complex(double r=0,double i=0) { real=r; image=i; }; 4 friend ostream & operator <<( ostream &, Complex &) ; }; 5 ostream & operator <<( ostream & output , Complex & obj) ; { output << obj.real << obj.image; 6 return output ; } int main() { Complex c; cout<

五、写出程序的运行结果

1. #include int main(void) { char str[]=\ char *p=str; cout<

# include class Node { public: int data; Node *next; Node(int d,Node * q=0) { data=d;next=q; } }; 第2题程序运行结果: int main() 67->45->23-> { int n; Node * p; Node * q=0; while (cin>>n){ p=new Node(n,q); q=p; } for(p=q;p;p=p->next) cout<data<<\ cout<<\ return 0; }//假定,输入如下3个数据:23 45 67↙ 4. #include class Plane{ protected: int x,y; public: Plane(int a,int b){x=a;y=b;} virtual void print() {cout<<'('< class ConstTest{ int m1,m2; public: ConstTest(int x,int y){ m1=x;m2=y;} void print(){cout<print(); ptr=&d2; ptr->print(); ptr->increase(4); ptr->print(); d2.print (); } (3, 6) 第4题 运行结果: (2, 7, 9) (6,11,13) (6,11,13) 第 13 页 共 22 页

void print() {cout<<'('< class Count{ static int count; public: Count(){count++;} static int Getc(){return count;} ~Count(){count--;} }; int Count::count=100; int main(void) { Count c1,c2; cout<

1. #include void main(void){ char string[]=\ char *p=string; cout< void main() { int a; cout<<\ cin>>a; switch(a%2) { case 0: cout<<\是偶数\ default: cout<<\是奇数\ } a=a/4; cout< class Point 第 14 页 共 22 页

{ int x,y; public: Point(int a=0,int b=0) {x=a; y=b;} void move(int xoffset,int yoffset) {x+=xoffset; y+=yoffset;} int getx() {return x;} int gety() {return y;} }; class Rectangle:public Point { int length,width; public: Rectangle(int x,int y,int l,int w):Point(x,y) { length=l;width=w;} int getlength(){return length;} int getwidth(){return width;} }; void main() { Rectangle r(0,0,4,9); r.move(33,66); cout< class Base { public: virtual void show() {cout<<\ }; class Derived1: public Base { public:void show() {cout<<\ }; class Derived2: public Derived1 { public:void show() {cout<<\}; void main() { Base b; Derived1 d1; Derived2 d2; Base *ptr[3]={&b,&d1,&d2}; for (int i=0;i<3;i++) ptr[i]->show(); } Base::show() Derived1::show() Derived2::show() 6.去掉上题(即第5小题)程序中的 “ virtual”关键字,运行结果如何? Base::show() Base::show() Base::show()

第 15 页 共 22 页

2. #include void main(){ int a,b; int n=0; for(a=1,b=1;a<=100;a++) {if(b>=10) break; if(b%3==1) { b+=3; n++; continue; } } cout< class A{ int a1,a2; public: A(int i,int j){a1=i;a2=j;} void printA(){cout< class Pixel{ int x, y; public: static int count; Pixel(){count++;} ~Pixel(){count--;} }; int Pixel::count =0; int main() { Pixel p[6]; Pixel p1=p[2]; cout<

第 16 页 共 22 页

5. #include class Pixel{ protected: int x,y; public: Pixel(int a,int b){x=a;y=b;} virtual void print() {cout<<\ virtual void move(int d); }; class Pixel_3d:public Pixel{ int z; public: Pixel_3d(int a,int b,int c):Pixel(a,b){z=c;} void print() {cout<<\} void move(int d); };

1. #include void main(void) { char string[]=\successful \ char *p=string; cout<print(); ptr=&d2; ptr->print(); ptr->move(5); ptr=&d1; ptr->print(); ptr=&d2; ptr->print(); } 6.去掉上题(即第5小题)程序中的 “ virtual”关键字,运行结果如何? 2. #include int main( ) { int x,y; cout<<\ cin>>x>>y; cout<<\ cout<<\cout<<”x*y=”< class Pixel{ int x, y; public: static int count; 4. #include class A{ int a; protected: int protect; 第 17 页 共 22 页

Pixel(){count++;} ~Pixel(){count--;} Pixel(const Pixel & obj) { x=obj.x; y=obj.y; count++; } }; int Pixel::count =0; int main(){ Pixel p[5]; cout<六.判断下面程序的主函数中语句①~⑩的对错。

第 18 页 共 22 页

#include class Base{ int a1; void seta1(int x){a1=x;} public: int a2; void seta2(int x){a2=x;} }; class DerivedB: protected Base{ protected: int b1, b2; void setb1(int x){b1=x;} public: void setb2(int x){b2=x;} }; class DerivedC: protected DerivedB{ int c1; void setc1(int x){c1=x;} public: int c2; void setc2(int y){c2=y;} void seta2(int y){Base::seta2(y);} void setb2(int y){b2=y;} }; int main(){ Base obja; DerivedB objb; DerivedC objc; obja.seta1(9); // ① objb.setb2 (4); // ② objc.setc2 (8); // ③ obja.a2=objb.b2+objc.c2;// ④ objb.setb1(18); // ⑤ objb.setb2(objc.c2);// ⑥ objc.Base::seta2(48);//⑦ objc.seta2(34); //⑧ objc.DerivedB::setb2(22);//⑨ objc.setb2(22); // ⑩ return 0; } //////////////答案如下:对√错× 题 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ 答错 对 对 案 私有的 错 b2 保护的 错 对 私有的 错 对 错 对 seta2 保护的

五、程序设计

1. 修改下面给出的程序,但不允许对main( ) 函数在作任何修改,使程序能够在屏幕上输出:

锄禾日当午, 汗滴禾下土。 谁知盘中餐, 粒粒皆辛苦。 原来的程序为:

#include void main(void) {

cout<<\汗滴禾下土。\

第 19 页 共 22 页

}

答:修改后的程序如下: #include class A

{ public: A(){cout<<” 锄禾日当午,”<

cout<<” 粒粒皆辛苦。”<

}; A a;

void main(void) {

cout<<\汗滴禾下土。\ }

2定义一个抽象类Shape,在此基础上派生出类Rectangel和Circle,二者都有计算对象面积的函数GetGetArea(),计算对象周长的函数GetPerim( ),在主函数中定义一个Shape指针数组分别指向Rectangel和Circle的对象,并通过Shape类的指针数组实现对这两个对象的成员函数的调用,输出圆和矩形的面积和周长。

#include class Shape

{ public: virtual void GetGetArea()=0; virtual void GetPerim( )=0; };

class Rectangel:public Shape { int x, y;

public:Rectangel(int i, int j){x=i; y=j;}

void GetGetArea(){cout<<\ Area:\ void GetPerim( ){ cout<<\ Perim:\};

class Circle : public Shape { float r;

public :Circle (float i ){r=i; }

void GetGetArea(){cout<<\ Area:\ void GetPerim( ){ cout<<\ Perim:\};

第 20 页 共 22 页

void main() { Shape *p[];

Rectangel rec(7,9); Circle cir( 9.5);

P[0]=& rec; p [0]-> GetGetArea(); p [0]-> GetPerim( ); P[1]=& cir; p [1]-> GetGetArea(); p[1]-> GetPerim( ); }

3. 定义一个字符串类String,有两个私有数据成员:char* content和int len;要求:

1)在构造函数中提示用户输入字符串;

2) 用户能提取和显示字符串;(分别由两个函数完成) 3)实现对字符串中所有小写字母变成大写,并显示。

4)在主函数中定义String类的对象,并对所有成员函数进行测试。 注意内存的分配与释放。

4.请编写程序声明一个基类Employee,从它派生出类Technician,在主函数中将一个动态分配的Technician的对象地址赋值给一个Employee的指针,然后通过指针释放对象空间。可以不声明数据成员,但要声明适当的析构函数释放内存。 #include class Employee { };

class Technician:public Employee { }; void main()

{ Employee *p=new Technician; delete p; }

5. 一圆型游泳池如图所示,现在需在其周围建一圆型过道,并在其四周围上栅栏。栅栏价格为20元/米,过道造价为15元/平方米。过道宽度为4米,游泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。

游泳

过道 #include class Shape

第 21 页 共 22 页

{ public: virtual double GetGetArea()=0; virtual double GetPerim()=0; };

class Circle :public Shape { double r1;

public :Circle (double i ){r1=i; }

double GetGetArea(){return 3.1415926*r1*r1;} double GetPerim( ){ return 2*3.1415926*r1;} };

class CircleLarge: public Circle { double r2; public :

CircleLarge(double i):Circle ( i ){r2=i+4;} double GetGetArea(){return 3.1415926*r2*r2 ;} double GetPerim( ){ return 2*3.1415926*r2 ;} };

class Cost: public CircleLarge

{ public: Cost(double i): CircleLarge(i){} void Display(void) { cout<<\过道造价:\

<<( CircleLarge:: GetGetArea()-Circle :: GetGetArea())*15<

6. 定义一个职工类Emplyee,有私有数据成员:姓名、序号和公司,并为它定义带参数的构造函数、拷贝构造函数、析构函数和输出数据成员值的公有成员函数print,在主函数中定义两个派生类对象对所有成员函数进行测试。

7. 定义一个学生类Student,具有三个属性:学号(long int)、姓名(char*)及年龄

(int),其中括号内注明了此属性值的数据类型,并要求自动生成学号;具有三个公有成员函数:带参数的构造函数,析构函数及print()(用于输出3个数据成员的值),在主函数中定义Student类的两个对象(其中一个动态创建)对Student类进行测试。 #include \

第 22 页 共 22 页

#include \class Student { long int num; char* name; int age;

static long int num1;

public:Student(char* name1,int age1) { num1++;num=num1; age=age1; name=new char[20];

strcpy(name,name1);

}

~Student(){ num1--; delete name;} void print() { cout<

cout<

};

long int Student::num1=0; void main()

{ Student st1(\

{Student st2(\Student st3(\st1.print(); st3.print(); }

本文来源:https://www.bwwdw.com/article/uyig.html

Top