1.假设有以下类A,下面程序片段,哪个是不正确的?
class A{
public:
int func(int a){return a*a;}
};
A.A a;a.func(5);
B.A a;A &r=a;r.func(5);
C.A a,b;if(a!=b) a.func(5);
D.A *p=new A;p->func(5);
C。不等号针对基本数据类型,需要对不等号进行运算符重载。
2.假设A是一个类的名字,下面程序片段,类A会调用析构函数几次?
int main(){
A * p = new A[2];
A * p2 = new A;
A a;
delete [] p;
}
A.2
B.1
C.4
D.3
D。指针p在析构时把宿主的所有元素都析构了,如果是调用构造函数就会析构两次。
3.
下面对于析构函数的描述中,正确的是( )
A.析构函数,既然是函数,同样可以带有参数
B.只有用delete关键字删除对象时,系统才会自动调用析构函数。
C.析构函数是系统的内置函。
D.析构函数名称为在类名或者构造函数名之前加一个“~”
D。
析构函数不是系统的内置函数,它是由程序员根据需要自行定义的成员函数,用于在对象生命周期结束时执行特定的清理工作。虽然所有的对象在被销毁时都需要执行析构函数,但具体如何实现和执行析构函数是由程序员控制的,因此它不是系统的内置函数。
4.指向类的数据成员指针所指向的数据成员,可以具有公有属性,也可以具有私有属性。
F。只能是公有属性才能指向数据成员的指针。
5.以下程序段,哪个是不正确的?
A.int main() { class A { public:int v; A *p; }; A a; a.p=new A; delete a.p; return 0; }
B.int main() { class A { public:int v; }; A *p=new A; p->v=4; delete p; return 0; }
C.int main() { class A { public:int v;A *p; }; A a; a.p=&a; return 0; }
D.int main() { class A { int v; }; A a; a.v = 3; return 0; }
D。v是私有的,a.v是错误的。
6.有如下的类定义:
class Sample
{
public:
Sample( );
Sample(int x );
......
};
动态申请对象存储单元,调用无参构造函数的语句是()。
A.Sample *a=new Sample(2);
B.Sample a=new Sample;
C.Sample *a=new Sample;
D.Sample a=new Sample( );
C