本篇文章2312字,读完约6分钟

21 .分析下述步骤的错误,证明错误原因。

# include

class base {

const int n;

公共:

base ( ) { cout’initializing default\n’; }

base ( INTM ) { cout’initializing\n’; n=m; }

~ base ( ) { cout’destroying\n’; }

};

void main ( )

{ base x=1;

base y=x;

}

a:(1)n=m; const数据成员不会以此格式赋值

(2)错误位置base y=x,用对象初始化对象

[分析] (1)作为const数据成员的n不能以赋值表达式的形式分配初始值,在定义构造函数时,必须在函数标题中以“base(int m):n(m )”的形式初始化。

(2)base y=x句中的‘=’不是代入的意思,而是初始化的意思。 即,在定义类base的对象y时,用对象x初始化,相当于base y(x )。 。 但是,如果要用对象初始化对象,则必须调用复制构造函数。 您不能调用系统的默认复制构造函数,因为程序没有提供复制构造函数。 客户给出构造函数后,不能调用系统提供的默认构造函数。 因此,base y=x; 错了。

【要闻】2004年自考面向对象程序设计模拟试题(三)

22 .分析下述步骤的错误,证明错误原因。

#include

class aa {

公共: int aa;

};

class bb:virtual public aa { )

int bb;

};

class CC :虚拟公共AA )

公共: int bb;

};

class dd:public bb,public cc { )

公共:浮动DD;

};

void main ( )

{ dd p;

int m=p.aa;

aa *pr=

aa pt=p;

dd *pp=(dd *)(bb *)pr;

ar;

dd ps=r;

}

a:(1)DD*PP=(DD*)(bb*)pr; ,虚基类指针不能分配给派生类指针

(2)dd ps=r,虚基对象不能初始化派生类对象引用

[解决]代入兼容规则的三个规则,在公开派生的情况下,派生类的对象可以指定给基类的对象; 派生类的对象可以初始化基类对象的引用,派生类对象的地址可以指定给基类对象的指针。 相反,上述三条规则是错误的。

(1)将基类aa的指针pr分配给派生类dd的指针pp是违反代入兼容规则的。

(2)虚基类aa的对象r初始化派生类dd的参照ps,并违反代入兼容规则。

23 .分析下述步骤的错误,证明错误原因。

#include

class a {

int x;

公共:

( a(int a) { x=a; fun ( ); }

virtual void fun()=0;

};

class b:public a {,鬈曲

公共:

b(int b) :a(b) {}

void fun() { }

};

void main ( )

{ a aa(5) :

b bb(8)

}

a:(1)fun ( ); ,构造函数不能调用纯虚函数

(2)a aa(5)抽象类不能定义对象

分析(1)构造函数“a(int a )”调用了纯虚函数“fun ( )”。 构造函数调用的虚函数是静态组合的,因此调用其自身类的虚函数。 这个调用是纯虚函数,只是被证明了,没有定义,所以不能执行。 这是错误。

(2)抽象类相当于对类的引用声明,因此只能定义该类的指针和引用,不能定义该对象。 这里,a是抽象类,而“a aa(5)”定义了a对象。 因为这是错误的。

24 .分析下述步骤的错误,证明错误原因。

#include

void fun ( )

{ ifstream myfile(“d:\abcd”)

myfile ”my file\n ';

}

void main ( )

{ fun ( ); }

a:(1)ifstream,输出所需的输出流ofstream

(2)myfile(“d:\abcd”),必备“\”

[解决](1)从函数“fun ( )”的函数本身来看,为了输出新闻“my file”,需要将文件与输出流相关联,但“ifstream”是输入流,只能向相关文件输入新闻。 因此,需要采用输出流“ofstream”。

(2)作为文件面的“d:\abcd”是字符串,其中的字符“\”一般被采用为转义字符。 为了在字符串中采用该字符的原义,必须使用两个字符,即“\”。

25 .分析以下步骤的错误,证明错误的原因。

#include

class aa {

int aa;

aa(int xx) { aa=xx; }

公共:

int get() { return aa; }

~ aa ( ) { cout’destroying’}

a:(1)aa(intxx )的访问属性错误,应该具有公开属性

(2)数组elem[3]初始化错误原因调用构造函数

解决方案(1)构造函数自动从系统中调用以生成对象,但通常在类外调用,因此其访问属性必须是公开的。 程序中构造函数的访问属性是专用的(默认),在运行过程中总是出错。

(2)关于数组元素的初始化,如果为程序提供带参数的构造函数,通常不能用数值表的形式实现(如程序所示)。 对于只包含一个参数的构造函数,初始化数组的实现方法如下: aa elem[3]={ aa(5)、aa(8)、aa(8) :

上一页[1][2]3[4][5]下一页

特别是根据各方面情况的调整和变化,新浪网提供的所有考试新闻都可以参考,所以考生请根据权威部门发表的正式消息。

来源:简阳新闻

标题:【要闻】2004年自考面向对象程序设计模拟试题(三)

地址:http://www.jycdb.com/jyjy/15962.html