本篇文章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; 错了。
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