一、选择题          
1. 类MyClass的定义如下:
class MyClass
{
public:
            MyClass() { value = 0;}
            SetVariable(int i) { value = i; }
private:
            int value;
    }
    则对下列语句序列正确的描述是_______D   <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

        MyClass *pmy  p=&my
    A)语句p=&my;是把对象my赋值给指针变量//把对象my的地址赋值给指针变量p
    B)语句MyClass *pmy;会调用两次类MyClass的构造函数  //调用1
    C)对语句 *p.SetVariable(5)的调用是正确的  //应为 (*p) . SetVariable(5)

    D)语句p->SetVariable(5)与语句my.SetVariable(5)等价
2. MyClass的定义如下:
class MyClass
{
public:
            MyClass( ) { }
            MyClass(int i) {value = new int(i); }
            int* value;
    }
若要对 value赋值, 则下面语句正确的是:___D

A) MyClass my; my.value =1000;  //my.value应存放地址,无法直接赋值

B) MyClass my; *my.value =1000; //my.value没初始化,*(my.value)=1000内存出错

C) MyClass my; my.*value =1000; //语法错误
D) MyClass my(lO);

 

3  对于拷贝构造函数,正确的描述是________A

    A)C++语言中,如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数
    B)必须为每个类定义拷贝构造函数 
    C)如果要使用拷贝构造函数,则必须在类中先定义
D)当定义了类的构造函数时,如果要使用拷贝构造函数,则必须定义拷贝构造函数
若没定义构造函数、拷贝构造函数、析构函数,使用默认的函数,但若定义了这类函数

默认的函数自动失效。
4. 对于拷贝构造函数和赋值操作的关系,正确的描述是__________C

    A)拷贝构造函数和赋值操作是完全一样的操作
    B)进行赋值操作时,会调用类的拷贝构造函数
    C)当调用拷贝构造函数时,类的对象正在被建立并被初始化
D)拷贝构造函数和赋值操作不能在同一个类中被同时定义
调用拷贝构造函数是定义一个新对象,赋值操作是对一个已存在的对象进行更新。

5.  对下列语句正确的描述是______C

    const int *x    //

    int *const x    //
    A)语句①的含义是指针变量x不能更改
    B)语句②的含义是指针变量x所指向的值不能更改
    C)语句②的含义是指针变量x不能更改
D)语句①和②是相同含义的不同定义方式
int  *const  x;//定义一个常量指针,x不能更改,*x可更改。       int y,t;const int *x=&y x=&t;//   *x=30;  //

const int *x //定义一个常量的指针(或称指针常量),x可更改,*x不可更改。 如:int y,t; const int *x=&y    *x=t;//   x=&t;  //

6 有如下定义语句:int a[]={12345};,则对语句int *p=a;正确的描述是_B  
    A)语句int *p=a;定义不正确
    B)语句int *p=a;初始化变量p,使其指向数组对象a的第一个元素
    C)语句int *p=a;是把a[0]的值赋给变量p
    D)语句int *p=a;是把a[1]的值赋给变量p
关于new运算符的错误的描述是_______A
    A)使用运算符new创建对象数组时必须定义初始值
    B)使用运算符new创建对象时,会调用类的构造函数
    C)运算符new可以用来动态创建对象和对象数组
D)使用new运算符创建的对象可以使用运算符delete删除
使用运算符new创建对象数组时不能为该数组定义初始值,

8.       包容类Contain和内嵌类Embed定义如下:
#include iostream.h
class Contain
{
private:
            int x;
protected:
            int z;
public:
            class Embed
            {
        private:
                    int y;
                public:
                    Embed() { y=100; }
                    int EmbedFun();
            }MyEmbed;
            int ContainFun();
    }
    对上面的定义,正确的描述是_________A
    A)定义类Embed对象的语句是:Contain::Embed embed
    B)Contain的成员函数ContainFun()中可以用MvEmbed.y的方式访问类Embed
      的私有成员y
    C)Embed的成员函数EmbedFun()中可以直接访问类Contain的私有成员x
D)Embed的成员函数EmbedFun()中可以直接访问类Contain的保护成员z
在类Contain内定义类Embed,类Embed称内嵌类,类Contain称包容类。内嵌类的成员函数对包容类的成员没有访问特权,反之亦然。

二、  填空题
9  const修饰符的语义是_修饰在它左边出现的类型描述符_______
10 常量对象应_初始化_____,并且不能在生成之后修改。
11 C++语言中,每个类都有一个隐含的指针叫做___this____指针。该指针指向
    ___正在调用成员函数的对象___
12 当一个类对象的成员函数被调用时,该成员函数的__ this指针__指向调用它的对象。
13  如果一个数组中的每个元素都是同一个类的对象,则该数组被称为_对象数组______
14  指向数组的指针是指_该指针指向一个数组_________
15  指针数组是指__该数组中每个元素都是指针______
16  有如下定义语句:MyClass *p;,则执行p=new MyClass;语句时,将自动调用该类
__构造函数_。执行delete p;语句时,将自动调用该类的___析构函数____
17  有如下定义语句:MyClass *p[10];,则当类对象数组指针p离开它的作用域时,系
统自动调用该类析构函数__0_____次。
18 有如下定义语句:MyClass p[10];则系统自动调用该类构造函数_10_次。当类
    对象数组p离开它的作用域时,系统自动调用该类析构函数___10____次。
19  定义在类中的类被称为__内嵌类___,定义了类的类被称为___包容类____
20  下面的类定义了拷贝构造函数,请完成该类的定义和实现。
class MyClass
{
public:
MyClass(int xx = 0, int yy = 0) {X = xx; Y = yy;}
____MyClass(MyClass& p )________;    //拷贝构造函数
private:
            int X, Y;
};
myClass::___ MyClass(MyClass& p )          //拷贝构造函数的实现
{
X=____p.X ______;
_____Y=p.Y ______;
    }
   
21       下列程序在构造函数和析构函数中申请和释放类的私有成员,请完成该类的实现。
class MyClass
{
public:
            MyClass(int a);
            ~MyClass();
private:
            int* X;
};
MyClass::MyClass(int a)
{
           ____X=new int(a) _____;
       }
MyClass::~MyClassO
{
           ____delete X ______;
}

 

22 下列程序通过把类Distance定义为类Point的友元类来实现计算两点之间距离的功能。请完成该程序。
#include <iostream.h>   ~  -
#include <math.h>
class Point
{
public:
            ______friend class Distance ______;
            Point ( ___float a=0,float b=0______ )
            {
                X=a;
                Y=b;
            }
            void Print()
            {
                cout << X= << X <<endl;
                cout << Y= << Y <<endl;
            }
        private:
float X, Y;
    }
class Distance
{
public:
            float Dis(Point& p, Point& q);
    }
float Distance::Dis(Point& p, Point& q)
{
        float result;
        ___result= sqrt((p.X-q.X)*(p.X-q.X)+(p.Y-q.Y)* (p.Y-q.Y))__;
    cout  << result << endl;
        return result;
    }
void main()
{
        Point p(10, 10), q(20, 20);
        Distance d;
        d.Dis(p, q);
       }