1. C++若定义类A:
class A{
public:
A();
A(int x);
}
执行语句A a(4), b[3], *p[2]; 则自动调用该类构造函数的次数是?
共4次。
A a(4) //这一定义,调用类A的赋值构造函数A(int x) 一次。
A b[3] //相当于定义了类型为A对象的数组,其元素个数为3,即调用三次类A的默认构造函数A()。
A *p[2] //定义了一个类型为A*的数组,即指向A类对象的指针数组,并未产生类A的对象,不调用构造函数。
关于构造函数调用次数:
A a(4);//定义一个对象,调用1次构造函数。
A b[3];//定义含有3个元素的数组,实际上定义3个对象,所以调用3次构造函数。
A *c;//定义指向类对象的指针,但没有进行实际的内存分配,所以不调用构造函数。
A **d;//定义指向类对象指针的指针,但没有进行实际的内存分配,所以不调用构造函数。
A *e[2];//定义含有两个指向类对象的指针的数组,但没有进行实际的内存分配,所以不调用构造函数。
A *f=new A;//涉及到内存的分配,调用1次构造函数。
A *g=new A[2];//涉及到内存的分配,调用2次构造函数。
总结:只有涉及到内存分配的时候,才会调用构造函数。普通对象调用一次,对象数组调用N次(该数组含有N个元素)。只定义指针而不给指针赋值,则不涉及内存分配,不调用构造函数。
2.下列语句中错误的是
A.const int a;
B.const int a=10;
C.const int*point=0;
D.const int*point=new int(10);
E.const int &a;
A.E.
用const定义一个常量,一旦定义好则在程序的任何地方都不能更改,所以必须在定义时赋初值。
常引用:
对引用而言,新定义的引用变量是不申请内存单元的,与它引用的对象共同同一块变量存储单元,正是因为这一特性,在声明一个引用的同时必须将其初始化。
常引用就是在引用之前加上const对引用进行限制,使得该引用在函数中不能进行改变(但可以改变原变量的值)。
int a = 6; // 定义整型变量a,初值为6
const int &b = a; // 声明常引用,不允许改变b的值
b = 8; // 改变常引用b的值,错误
a = 8; // 改变a的值,正确
3. 编译期会出现的错误提示?
编译器在编译时是以c/c++文件为单位进行的, 如果项目中没有c/c++文件,那么你的项目将无法编译。经过预编译得到的输出文件中,将只有常量。如数字、字符串、变量的定义,以及C语言的关键字,如main,if,else,for,while,{,},+,-,*,\,等等。编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
4. 已知:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
cout<< *(*(a + 1) + 2)的结果?
结果为6
5. 下列程序段中包含4个函数,其中具有隐含this指针的是
int fun1();
class Test(){
public:
int fun2();
friend int fun3();
static int fun4();
}
fun2()
this指针是成员函数所属对象的指针,是指向类对象的地址,是一个隐含的指针,隐含于每个类的非静态成员函数中。fun1()是外部函数,fun3()是友元函数,fun4()是静态成员函数。