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参数为空的函数,第二句用函数调用函数会编译出错
- 一些C语言题目(二)
- [笔试]C语言题目(二)
- C初级阶段练习题目(二)
- C/C++面试、笔试题目(二)
- C/C++面试、笔试题目(二)
- C/C++ 笔试、面试题目大汇总(二)
- C语言面试宝典题目分析(二)
- C/C++ 笔试、面试题目大汇总(二)
- 【经典】113道C语言题目(二)
- C++题目(二)
- 课程设计(题目二)
- Linux题目(二)
- 牛客网题目(二)
- linux c/c++ 面试题目整理(二)
- 题目(c++)
- 2008课程设计题目(二)
- 求职笔试题目(二)
- hdoj简单题目(二)
- ASP.NET中文乱码三个解决办法
- 敏捷开发 前提条件 执行关键字
- oracle数据库索引
- qtp 学习心得(持续更新中)
- 3.hql简单属性查询:hibernate.cfg.xml
- C++题目(二)
- VB实现Com+组件配置
- 4.hql简单属性查询:测试
- undefined reference to `vtable for Thread'
- 5.hql简单属性查询:总结
- Java 强引用、 软引用、 弱引用、虚引用
- hadoop运行命令
- plsql IP地址登录
- 淘宝面试-Strcpy与memcpy两函数的经典实现