1.有如下一段程序,则以下不合法的是 C
int f1(float);
int f2(char);
int f3(float);
int f4(float);
int (*pf)(float);
A int (*p)(float)=&f1;
B pf=&f4;
C pf=&f2;
D pf=f3;
解:
函数指针变量:
函数指针变量的声明方法为:
返回值类型 ( * 指针变量名) ([形参列表]);
根据定义,
int(*pf)(float);
int (*p)(float)=&f1;
pf,p都是函数指针变量。
函数地址
C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。
函数地址的获取,可以是函数名,也可以在函数名前加取地址符&
C错误是因为函数行参类型不匹配
2.计算机假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句最好为 C
A AB operator+(AB& A,AB& B)
B AB &operator+(AB A)
C AB operator+(AB &A)
D AB *operator+(AB A)
解:成员函数操作两个对象时,只需传递一个对象参数,另一个是调用成员的的this。友员函数则需要两个对象参数
B :operate+不改变this对象,用临时变量做返回值。出了作用域,临时变量被销毁,此时引用做返回值会发现内容没有了,出错,达不到理想效果
3.下列代码,循环了多少次 10
k = 2000
while(k > 1)
{
k = k >> 1;
}
解:>>是位移符号。可以理解为每次除以2.
从k=2000直到k=1,共需10次位移操作
4.对于结构变量的操作,下面哪一种说法是错误的 D
A 两个相同类型的结构变量之间可以赋值,就是复制全部成员的值
B 两个结构变量之间不能进行关系运算
C 不能用cin输人一个结构变量的全部成员
D 可以用一个cout输出一个结构变量的全部成员的值
解:
(1)可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量
(2)只有结构变量的成员可以进行运算,变量之间不可以进行运算
(3)不能将一个结构体变量作为一个整体进行输入和输出。student1和student2为结构体变量,并且它们已有值。
(4)不能cin>>student1;只能对结构体变量中的各个成员分别进行输入和输出
5.下列哪个叙述是正确的 B
A 子类继承父类的构造方法。
B abstract类的子类必须是非abstract类
C 子类继承的方法只能操作子类继承和隐藏的成员变量
D 子类重写或新增的方法也能直接操作被子类隐藏的成员变量
解:
(1)构造函数不被继承
(2)抽象类是指含有纯虚函数的类,纯虚函数是被继承的基类,其基类一定是会重写这个虚方法的
(3)继承是获得基类所有部分,只不过有的部分不能直接进行操作,不是说不能操作,比如说父类的私有成员,可以通过作用域解析符操作
(4)隐藏指的是同名隐藏,指的是重名情况下默认调用子类方法
重写是在基类有虚函数的情况下并且子类函数重名类型返回值都相同情况下进行的重写,都是会调用子类,如果想对于父类进行操作需要作用域解析来限定,所以错在直接