1.如果定义了一个类myclass, 则为myclass类对象以成员函数形式重载后++运算符的声明应该是:
正确答案: B 你的答案: C
A myclass operator++()
B myclass operator++(int)
C myclass &operator++()
D myclass &operator(int)
重载单目运算符++或(--)作为前缀和后缀是不同的
#include <iostream>
using namespace std;
class Complex {
private:
double i;
double j;
public:
Complex(int = 0, int = 0);
void display();
Complex operator ++();//前缀自增
Complex operator ++(int);//后缀自增,参数需要加int
};
Complex::Complex(int a, int b) {
i = a;
j = b;
}
void Complex::display() {
cout << i << '+' << j << 'i' << endl;
}
Complex Complex::operator ++() {
++i;
++j;
return *this;
}
Complex Complex::operator ++(int) {
Complex temp =*this;
++*this;
return temp;
}
int main()
{
Complex comnum1(2,2), comnum2,comnum3;
cout << "自增计算前:" << endl;
cout << "comnum1:";
comnum1.display();
cout << "comnum2:";
comnum2.display();
cout << "comnum3:";
comnum3.display();
cout << endl;
cout << "前缀自增计算后:" << endl;
comnum2 = ++comnum1;
cout << "comnum1:";
comnum1.display();
cout << "comnum2:";
comnum2.display();
cout << endl;
cout << "后缀自增计算后:" << endl;
comnum3 = comnum1++;
cout << "comnum1:";
comnum1.display();
cout << "comnum3:";
comnum3.display();
return 0;
}
成员函数运算符重载:
函数类型 operator 运算符(参数表);
非成员函数运算符重载:
友元函数原型的格式:
friend 函数类型 operator 运算符(参数表);
运算符重载的原则
运算符重载不允许发明新的运算符。
不能改变运算符操作对象的个数。
运算符被重载后,其优先级和结合性不会改变。
不能被重载的运算符:
:: ?: . .* sizeof 参考
2.下列描述,正确的一共有多少个?
1)const char *p,这是一个常量指针,p的值不可修改 p指向的值不能改变
2)在64位机上,char *p= “abcdefghijk”; sizeof(p)大小为12 64位机上指针为8 bytes
3)inline会检查函数参数,所以调用开销显著大于宏 内联函数会类型检查,宏只进行代码的简单替换
inline:在编译时,把函数代码直接插入到目标代码中,通过空间换取时间来提高执行效率;不存在普通函数的调用开销(现场的保护,数据的保存)。
4)重载是编译时确定的,虚函数是运行时绑定的;
正确答案: A 你的答案: A
A1
B2
C3
D4
3.以下程序段的执行结果是()。
double x;x=218.82631;
printf("%-6.2e\n",x);
正确答案: C 你的答案: 空
A输出格式描述符的域宽不够,不能输出
B输出为21.38e+01
C输出为2.19e+02
D输出为-2.14e2
e: 表示要求用科学计数法表示;
-: 表示左对齐(省略或+表示右对齐);
6.2 指的是输出域宽;
6表示整个数在输出设备所在字符数为6;(超过就按实际输出,不足时看是左对齐还是右对齐,左对齐在后面补空格,右对齐在前面补空格)(这里输出的字符数是8,所有符号都算上)
2表示小数部分输出宽度为2
4.以下叙述中正确的是()
正确答案: A 你的答案: A
Aint* p1; int ** p2; int *p3;都是合法的定义指针变量的语句
B指针变量只能通过求地址运算符(&) 来获得地址值
C语句p=NULL;与p=\0;是等价的语句 p=NULL ;和 p=0 ;或 p='\0' ;等价
D语句p=NULL;执行后,指针p指向地址为0的存储单元
语句 p=NULL; 执行后,指针 p 并不是指向地址为 0 的存储单元,而是具有一个确定的值 -" 空 "
5.若有说明:int i, j=2,*p=&i;,则能完成 i=j 赋值功能的语句是()。
正确答案: B 你的答案: C
A i=*p;
B *p=*&j;
C i=&j;
D i=**p;
*p = *&j; 等价于 *p = j; 等价于 i=j;
6.一个最简单的C++程序,可以只有一个( )。
正确答案: C 你的答案: A
A库函数
B自定义函数
Cmain函数
D空函数
main函数是程序的唯一入口,也就是说程序运行时,要先从main函数开始执行。
一个程序必须有一个main函数,而且只有一个main函数。
7.c/c++中,有关纯虚函数说法正确的是( )
正确答案: B D 你的答案: A B D
A子类中必须覆盖基类的纯虚函数 如果基类中的纯虚函数在子类中没有覆盖,那这个子类还是一个抽象类,不能实例化。
B含有纯虚函数的类不能被实例化
C子类中必须覆盖基类的虚函数
D含有纯虚函数的类一定是抽象类
8.从字符串里寻找一串字符的函数时下面哪一个?()
正确答案: B 你的答案: D
A strcmp strcmp比较字符串str1 and str2
B strstr strstr函数返回一个指针,它指向字符串str2 首次出现于字符串str1中的位置,如果没有找到,返回NULL
C strcat strcat函数将字符串str2 连接到str1的末端,并返回指针str1
D strfind strfind是MATLAB中的函数
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL
例如:
char str2 = “cdef”;
char str1 = “abcdefgh”;
则通过函数,将返回
strstr(str1,str2) = cdefgh;
如果str1不包含有str2。
char str2 = “cxef”;
char str1 = “abcdefgh”;
则通过函数,将返回
strstr(str1,str2) = NULL;