您的位置:首页 > 编程语言 > C语言/C++

c++面试笔试必备知识

2015-08-23 22:08 281 查看
<pre name="code" class="cpp">//①静态对象成员
#include <iostream>
using namespace std;

class A
{
public:
A() { cout << "A's Constructor Called " << endl;  }
};

class B
{

public:
B() { cout << "B's Constructor Called " << endl; }
static A a;
};

A B::a;//如果没有这个,则下面的B b不会调用A的构造函数

int main()
{
B b;//a的构造函数在main函数之前就访问了,b的现在才会调用构造函数
B::a;//能正常访问
return 0;
}
//解释:上面的程序只是调用了B的构造函数,没有调用A的构造函数。
//因为静态成员变量只是在类中声明,没有定义。
//静态成员变量必须在类外使用作用域标识符显式定义。

//②联合体和枚举
#include <iostream>
using namespace std;

union
{
int i;
char x[2];
}a;

class A
{
enum{a,b,c,d};
};

class B
{
enum{a,b,c,d}C;
};
int main()
{
cout<<"sizeof(A):"<<sizeof(A)<<endl;//输出1
cout<<"sizeof(B):"<<sizeof(B)<<endl;//输出4

a.i = 0;		//00 00 00 00
a.x[0] = 10;  //0a 00 00 00
a.x[1] = 1;  //0a 01 00 00
//a小端字节序 a = 0x010a = 266
cout<<"a.i:"<<a.i<<endl;
return 0;
}

//③下面代码不会报错?
class A {
public:
int m;
void print() {  cout << "A\n";  }
};

//上面的void print();---->void print(A * const this);
int main()
{
A *pa = 0;
pa->print();//相当于print(pa)
return 0;
}
//并不是类没有初始化就不能调用类的成员函数.
//如果成员函数只是简单的打印个东西,没有调用类成员啥的就不会报段错误。

//返回值加const修饰的必要性
//你觉得下面两种写法有区别吗?

A GetA(void);
const A GetA(void);
//答案:没有任何区别。
//解释:如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const 修饰没有任何价值。所以,对于值传递来说,加const没有太多意义。
//所以:
//不要把函数A GetA(void) 写成const A GetA(void)。
//当然 如果是返回引用,那就不一样了。




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: