C++题目(二)

来源:互联网 发布:淘宝网店数量统计 编辑:程序博客网 时间:2024/06/15 23:38

1.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。
#define  SECONDS_PER_YEAR(60*60*24*365)UL
应该意识到表达式将使一个16位机的整形数溢出,因此要用到长整型符号L,表达式中UL表示无符号长整型。

2.写一个“标准”宏MIN,这个宏输入连个参数并返回较小的一个。
#define MIN(A,B) ((A)<=(B)?(A):(B))
懂得在宏中小心的吧参数用括号扩起来

3.C++中的空类默认产生那些类成员函数?
Class Empty
{ public:
};
答案:对于一个空类,编译器默认产生4个成员函数:默认构造函数,析构函数,拷贝构造函数和赋值函数

4. 如果定义了一个类myclass,则为myclass类对象以成员函数形式重载后++运算符的声明应该为 C
A. myclass operator++();
B. myclass& operator++();
C. myclass operator++( int );
D. myclass& operator++( int );

解析:B为前++的表达,后++为了与前++区别开来才多加的一个参数int并没有什么特殊的意义,只是调用的时候传个0或其他的整数就可以调用后++。至于为什么后++返回的不是引用,这就要看后++的实现了。代码如下:

#include <iostream>#include <string.h>using namespace std;class A{        public:                A (int n);                A operator++(int);                A &operator++();                int m_data;};int main(){        A a(0);        cout<<(++a).m_data<<endl;//这里注意.的优先级高于++        cout<<a.operator++().m_data<<endl;        cout<<(a++).m_data<<endl;        cout<<a.m_data<<endl;        cout<<a.operator++(0).m_data<<endl;        cout<<a.m_data<<endl;        return 0;}A::A(int n){ m_data = n;};A &A::operator++(){        this->m_data++;        return *this;}A A::operator++(int){        A temp(*this);        this->m_data++;        return temp;}

5. 父类和子类各自定义一个成员函数,函数名相同,参数表不同,那么 C 。 函数同名,通通覆盖,不同层次的函数不能重载
A. 在子类中这两个函数构成重载关系
B. 子类不会继承父类的这个函数
C. 子类中的函数会覆盖父类中的函数
D. 编译时会发生错误

6. 如果myclass类定义了拷贝构造函数和一个整型参数的构造函数,还重载了赋值运算符,那么语句
myclass obj = 100;会 B 。等价于 myclass obj = myclass(100)
A. 调用拷贝构造函数
B. 调用整型参数的构造函数
C. 调用赋值运算符
D. 引起编译错误

7. 多重继承时,如果派生类的两个父类有一个共同的虚基类,那么虚基类的初始化参数由 C 的构造函数来传递。
A. 第一个父类
B. 第二个父类
C. 派生类
D. 以上都不是

8. 如果有如下语句
char str[20];
cin >> str;
cout << str;
执行时输入的是“this is a test line!”,则输出的内容是 D 。
A. this is a test line!
B. this is a test line
C. this is a test
D. this

9.以下是否正确?
Class A
{ const int size=0;};
错误:常量必须在构造函数的初始化列表里面初始化或者将其设置为static
正确的程序如下:
Class A
{ A(){ const int size=0; }};
或者:
Class A
{ static const int size=0; };

注意不能在类中有:static int a = 0; 或 const int a = 0;只有static const int a = 0 才可以。

10.设float x = 1,y = 2,z = 3 (如果是int y=2, int z=3,那么结果为3会产生截断在=的时候),则表达式 y+=z--/++x 的值是(A)
A. 3.5
B.3
C.4
D.5

11.二位数组 A[10…20 , 5…10] 采用行序为主序方式存储,每个数据元素占 4 个存储单元,且 A[10][5] 的存储地址是 1000 ,则 A[18][9] 的地址是(A)数组A代码行从10到20,列为5到10
A.        1208
B.        1212
C.        1368
D.        1364

12.设有“int w[3][4];”pw是与数组名w等价的数组指针,则pw的初始化语句为 int (*p)[4] = w。

13.要使引用pr代表变量“char *p”,则pr的初始化语句为char *&pr = p;

14.请写出如下代码的运行结果:6(a+++b等价为(a++)+b)
#include <iostream>
using namespace std;

int main ()
{
        int a=0;
        int b=1;
        int c=2;
        int d=3;
        printf("%d\n", a+++b+c+++d++);
        return 0;
}

15.[0, 2, 1, 4, 3, 9, 5, 8, 6, 7]是以数组形式存储的最小堆,当删除第一个元素的时候,数组里面的元素为:[1,2, 5, 4, 3, 9, 7, 8, 6]

16.地址寄存器的长度为24位,页号占14位, 主存的分块大小为:2的十次方。

17.c++中的stl中的iterate重载的运算符有:++(前后都有)、!=、==、*(前)

18.c++中,不能重载的操作符有?

重载操作符的限制:
1 并不是所有的操作符都能被重载。除了. ,.* ,:: ,? : ,sizeof,typeid这几个运算符不能被重载,其他运算符都能被重载
2 重载不能改变该运算符用于内置类型时的函义,程序员不能改变运算符+用于两个int型时的含义。
3 运算符函数的参数至少有一个必须是类的对象或者类的对象的引用。这种规定可以防止程序员运用运算符改变内置类型的函义。
4 重载不能改变运算符的优先级。
5 重载不能改变运算符的结合律。
6 重载不能改变运算符操作数的个数。比如+需要两个操作数,则重载的+也必须要有两个操作数。

19.有如下代码:
#pragma pack(2)

class A{
 int n;
 char a[13];
}a;

sizeof(a)的值为18.

20:有下面的语句,会出现编译错误的为:
A{
 A(){};
 A(int n){};
 fun(){};
};

1:A a();
2:a.fun();
第二句,第一句虽然没有定义一个对象a,但是第一句是声明了一个返回类型为A函数名字为a参数为空的函数,第二句用函数调用函数会编译出错

原创粉丝点击