一、选择填空
1.在下列关键字中,用以说明类中公有成员的是( )。
A.public; B.private; C.protected; D.friend
2.下列的各类函数中,( )不是类的成员函数。
A. 构造函数; B.析构函数;
C.友元函数;D.拷贝初始化构造函数
3.作用域运算符的功能是( )。
A.标识作用域的级别的;
B.指出作用域的范围的;
C.给定作用域的大小的;
D.标识某个成员是属于哪个类的。
4.( )是不可以作为该类的成员的。
A.自身类对象的指针;
B.自身类的对象;
C.自身类对象的引用;
D.另一个类的对象。
5.( )不是构造函数的特征。
A.构造函数的函数名与类名相同;
B.构造函数可以重载;
C.构造函数可以设置缺省参数;
D.构造函数必须指定类型说明。
6.( )是析构函数的特征。
A.一个类中只能定义一个析构函数;
B.析构函数名与类名不同;
c.析构函数的定义只能在类体内;
D.析构函数可以有一个或多个参数。
7.通常的拷贝初始化构造函数的参数是( )。
A.某个对象名;
B.某个对象的成员名; ‘
C.某个对象的引用名;
D.某个对象的指针名。 .
8.关于成员函数特征的下述描述中,( )是错误的。
A.成员函数一定是内联函数;
B.成员函数可以重载;
C.成员函数可以设置参数的缺省值;
D.成员函数可以是静态的。
9.下述静态数据成员的特性中,( )是错误的。
A.说明静态数据成员时前边要加修饰符static
B. 静态数据成员要在类体外进行初始化
C.引用静态数据成员时,要在静态数据成员前加<类名>和作用域运算符
D.静态数据成员不是所有对象所共用的。
10.友元的作用( )。
A.提高程序的运用效率;
B.加强类的封装性;
C.实现数据的隐藏性;
D.增加成员函数的种类。
二、判断下列描述的正确性,对者划√,错者划×。
1.使用关键字class定义的类中缺省的访问权限是私有(private)的√。
2.作用域运算符(::)只能用来限定成员函数所属的类。
3.析构函数是一种函数体为空的成员函数。
4.构造函数和析构函数都不能重载。
5.说明或定义对象时,类名前面不需要加class关键字。√
6. 对象成员的表示与结构变量成员表示相同,使用运算符.或者->
7.所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问都是非法的。
8.某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。
9. 可以在类的构造函数中对静态数据成员进行初始化
10.如果一个成员函数只存取一个类的静态数据成员,则可将该成员函数说明为静态成员函数√。
三、分析下列程序的输出结果。
1.构造函数
#include <iostream.h>
class A
{
public:
A();
A(int i,int j);
void print();
private:
int a,b;
};
A::A()
{
a=b=0;
cout<<"Default constructor called.\n";
}
A::A(int i,int j)
{
a=i;
b=j;
cout<<"Constructor called.\n";
}
void A::print()
{
cout<<"a="<<a<<",b="<<b<<endl;
}
void main()
{
A m,n(4,8);
m.print();
n.print();
}
2. 类中有其它类的对象
#include<iostream.h>
class B
{
public:
B(){}
B(int i,int j);
void printb();
private:
int a,b;
};
class A
{
public:
A(){}
A(int i,int j);
void printa();
private:
B c;
};
A::A(int i,int j):c(i,j)
{}
void A::printa()
{ c.printb(); }
B::B(int i,int j)
{ a=i; b=j; }
void B::printb()
{ cout<<"a="<<a<<",b="<<b<<endl; }
void main()
{
A m(7,9);
m.printa();
}
3. 静态成员变量和静态成员函数
#include<iostream.h>
class Count
{
public:
Count(){ count++; }
static int HM(){return count;}
~Count()
{
count--;
cout<<"count="<<HM()<<endl;
}
private:
static int count;
};
int Count::count=100;
void main()
{
Count c1,c2,c3,c4;
cout<<"Count::HM : "<<Count::HM()<<endl;
cout<<"c1.hm : "<<c1.HM()<<endl;
}
4. 引用
#include<iostream.h>
class A
{
public:
A(double t,double r){ Total=t; Rate=r;}
friend double Count(A &a)
{
a.Total += a.Rate*a.Total;
return a.Total;
}
private:
double Total,Rate;
};
void main()
{
A a1(100.0,0.35),a2(200.0,0.02);
cout<<Count(a1)<<","<<Count(a2)<<endl;
}
5. 引用和拷贝构造函数
#include<iostream.h>
class Set
{
public:
Set(){ PC=0; }
Set(Set &s);
void Empty(){ PC=0; }
int IsEmpty(){ return PC==0; }
int IsMemberOf(int n);
int Add(int n);
void Print();
friend void reverse(Set *m);
private:
int elems[100];
int PC;
};
int Set::IsMemberOf(int n)
{
for(int i=0;i<PC;i++)
if(elems[i]==n)
return 1;
return 0;
}
int Set::Add(int n)
{
if(IsMemberOf(n))
return 1;
else if(PC>=100)
return 0;
else
{
elems[PC++]=n;
return 1;
}
}
Set::Set(Set &p)
{
PC=p.PC;
for(int i=0;i<PC;i++)
elems[i]=p.elems[i];
}
void Set::Print()
{
cout<<"{";
for(int i=0;i<PC-1;i++)
cout<<elems[i]<<",";
if(PC>0)
cout<<elems[PC-1];
cout<<"}"<<endl;
}
void reverse(Set *m)
{
int n=m->PC/2;
for(int i=0;i<n;i++)
{
int temp;
temp = m->elems[i];
m->elems[i] = m->elems[m->PC-i-1];
m->elems[m->PC-i-1]=temp;
}
}
void main()
{
Set A;
if(A.IsEmpty())
cout<<"空序列"<<endl;
else
cout<<"非空序列"<<endl;
A.Print();
Set B;
for(int i=1;i<=8;i++)
B.Add(i);
B.Print();
if(B.IsMemberOf(5))
cout<<" 数 5 在此序列中"<<endl;
else
cout<<" 数 5 不在此序列中"<<endl;
B.Empty();
for(int j=11;j<20;j++)
B.Add(j);
Set C(B);
C.Print();
reverse( &C);
C.Print();
}
四、按下列要求编写程序。
在一个程序中,实现如下要求:
(1)构造函数重载;
(2)成员函数设置缺省参数;
(3)有一个友元函数;
(4)有一个静态函数;
(5)使用不同的构造函数创建不同对象。
温馨提示:答案为网友推荐,仅供参考