配色: 字号:
类和对象(一)
2012-07-12 | 阅:  转:  |  分享 
  
类和对象(一)

选择填空

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

A、public

B、private

C、protected

D、frined

答案:A

2、下列的各种函数中,()不是类的成员函数。

A、构造函数

B、析构函数

C、友元函数

D、拷贝初始化构造函数

答案:C

3、作用域运算符的功能是()

A、标识作用域的级别的

B、指出作用域的范围的

C、指定作用域大小的

D、标识某个成员是属于哪个类的

答案:D

4、(B)是不可以作为该类的成员的。

A、自生类对象的指针

B、自身类的对象

C、自身类对象的引用

D、另一个对象的对象

答案:B

5、()不是构造函数的特征。

A、构造函数的函数名与类名相同

B、函数可以重载

C、函数可以设置默认参数

D、函数必须指定类型说明

答案:D

6、()是析构函数的特征。

A、一个类中只能定义一个析构函数

B、析构函数名与类名不同

C、析构函数的定义只能在类体内

D、析构函数可以有一个或多个参数

答案:A

7、通常的拷贝初始化构造函数的参数是()

A、某个象名

B、某对象的成员名

C、某个对象的应用名

D、某个对象的指针名

答案:C

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

A、成员函数一定是内联函数

B、成员函数可以重载

C、成员函数可以设置参数的默认值

D、成员函数可以是静态的

答案:A

9、下列静态数据成员的特征中,()是错误的。

A、说明静态数据成员时前边要加修饰符static

B、静态数据成员要在类体外进行初始化

C、引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符

D、静态数据成员不是所有对象所共有的

答案:D

10、友元的作用是()

A、提高程序的运行效率

B、加强类的封装性

C、实现数据的隐藏性

D、增加成员函数的种类

答案:A

二、判断下列描述的正确性,对的打勾,错的打叉

1、使用关键字class定义的类中默认的访问权限是私有(private)的。对

2、作用域运算符(::)只能用来限定成员函数所属的类。错

3、析构函数是一种函数体为空的成员函数。错

4、构造函数和析构函数都不能重载。错

5、说明或定义对象时,类名前面不需要加class关键字。对

6、对象成员的表示与结构变量成员表示相同,使用运算符.或->。对

7、所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对他们的访问都是非法的。错

//8、某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。对

9、可以在类的构造函数中对静态数据成员进行初始化。错

10、如果一个成员函数只存取一个类的静态数据成员,则可以将该成员函数说明为静态成员函数。对

三.分析下列程序的输出结果

1、

#include

classA

{

public:

A();

A(inti,intj);

voidprint();

private:

inta,b;

};

A::A()

{

a=b=0;

cout<<”Defaultconstructorcalled.\n”;

}

A::A(intI,intj)

{

A=i;

B=j;

Cout<<”constructorcalled.\n”

}

voidA::print()

{

Cout<<”a=”<
}

voidmain()

{

Am,n(4,8);

m.print();

n.print();

}

运行该程序输出结果显示如下所示:

Defaultconstructorcall

Constructorcalled

a=0,b=0

a=4,b=8

说明:

该程序中定义一个类A,该类中有两个构造函数一个

是默认构造函数,另一个是带两个参数的构造函数。类

还有一个print()函数,用来输出显示该类的两个私有

数据成员的值。类中的所有成员函数都定义在类体外,

该类有明显的说明部分和实现部分。

2、

#include

classB

{

public:

B(){}

B(inti,intj);

voidprintb();

private:

inta,b;

};

classA

{

public:

A(){}

A(inti,intj);

voidprinta();

private:

Bc;

};

A::A(inti,intj):c(i,j)

{}

voidA::printa()

{

c.printb();

}

B::B(inti,intj)

{

a=i;

b=j;

}

voidB::printb()

{

cout<<”a=”<
}

voidmain()

{

Am(7,9);

m.printa();

}

运行该程序输出结果如下。

a=7,b=9

说明:

该程序中有两个类:A和B。在类A中有一个类

的对象作为私有成员,该成员又称为子对象。

3、

#include

classCount

{

public:

Count(){count++;}

staticintHM(){returncount;}

~Count(){count--;}

private:

staticintcount;

};

intCount::count=100;

voidmain()

{

Countc1,c2,c3,c4;

Cout<
}

运行该程序输出如下结果:

104

说明:

该程序中只定义了一个类Connt,该类中有一个静态

员函数HM()和静态数据成员count。对静态数据成员

类体外以下述形式进行了初始化。

intCount::count=100;

该类中还有一个默认构造函数和析构函数,这两个

数中对数据成员count进行了操作。在主函数中,先创建

该类的4个对象c1,c2,c3和c4.这时系统将要自动调用

4次默认构造函数进行初始化,于是,count将值增加为104。再使用类名限定的形式调用静态成员函数HM(),输出显示count的值为104.程序结束前,调用4次析构函数将count的值又恢复到100.

4、

#include

classA

{

public:

A(doublet,doubler){Total=t;Rate=r;}

FrienddoubleCount(A&a)

{

Total+=a.Ratea.Totalp;

returna.Total;

}

private:

doubleTotal,Rate;

};

voidmain

{

Aa1(1000.0,0.035),a2(768.0,0.028);

cout<
}

运行该程序输出如下结果:

1035,789.504



5、

#include

ClassSet

{

Public:

Set(){PC=0;}

Set(Set&p);

voidEmpty(){PC=0;}

voidIsEmpty(){returnPC==0;}

intIsMemberOf(intn);

intAdd(intn);

voidPrint();

frientvoidreverse(Setm);

private:

intelems[100];

intPC;

};

intSet::IsMemberOf(intn)

{

for(inti=0;i
if(elems[i]==n)

return1;

return0;

}

intSet::Add(intn)

{

If(IsMemberOf(n))

return1;

elseif(PC>=100)

return0;

else

{

Elems[PC++]=n;

Return1;

}

}

Set::Set(Set&p)

{

PC=p.PC;

for(inti=0;i
elems[i]=p.elems[i];

}

voidSet::Printf()

{

cout<<’{’;

for(inti=0;i
cout<
if(PC>0)

cout<
cout<<’}’<
}

voidrenerse(Setm)

{

intn=m->PC/2;

for(inti=0;i
{

inttemp;

temp=m->elems[i];

m->elems[i]=m->elems[m->PC-i-1];

m->elems[m->PC-i-1]=temp;

}

}

voidmain()

{

SetA;

cout<
print();

SetB;

for(inti=1;i<=8;i++)

Add(i);

B.Print();

cout<
B.Empty();

For(intj=11;j<20;j++)

B.Add(j);

SetC(B);

C.Print();

Reverse(&C);

C.Print;

}

运行该程序输出如下结果:

1

{}

{0,1,2,3,4,5,6,7,8,}

1

{11,12,13,14,15,16,17,18,19}

{19,18,17,16,15,14,13,12,11}

四、按下列要求编写程序:

(1)、构造函数重载;

(2)、成员函数设置默认参数;

(3)、有一个友元函数;

(4)、有一个静态函数;

(5)、使用不同的构造函数创建不同的对象。

程序内容如下所示:

#include

classTest

{

public:

Test(){}

Test(inti,intj=20)

{

t1=i;

t2=j;

t+=j-1;

}

staticintfun(Test&T);

friendintadd(Test&T);

private:

intt1,t2;

staticintt;

};

intTest::fun(Test&T)

{

t+=T.t;

returnt;

}

intadd(Test&T)

{

intn=T.t1+T.t2;

returnn;

}

intTest::t=5;

voidmain()

{

Testa1,a2(10),a3(15,25);

cout<
cout<
}





















献花(0)
+1
(本文系倚栏听舞首藏)