c/c++面试题目

问题一:定义了一个类,其指针成员是用new来初始化的,请指出可能出现的三个问题及其解决方法:

答:

首先,当这种类型的对象过期时,对象的成员指针指向的数据仍将保留在内存中,这将占用空间,同时不可访问,因为指针已经丢失。可以让类析构函数删除构造函数中new分配的内存,来解决这种问题。

其次,析构函数释放这种内存后,如果程序将这样的对象初始化为另一个对象,则析构函数将试图释放这些内存两次。这是因为将一个对象初始化为另一个对象的默认初始化,将复制指针值,但不复制指向的数据,这将使两个指针指向相同的数据。解决方法是,定义一个复制构造函数,使初始化复制指向的数据。

第三,将一个对象赋给另一个对象也将导致两个指针指向相同的数据。解决方法是重载赋值运算符,使之复制数据,而不是指针。

问题二:静态成员和静态成员函数的总结:

一、静态成员的特点: 

(1)static数据成员在类的内部声明,但只能在类的外部定义,在类的外部不能指定static,在类的定义时候进行初始化; 

(2)static数据成员只能在类的外部进行初始化(特例:当整型const static数据成员被常量表达式初始化时,就可以在类的内部进行初始化,但还需要在外部进行定义)。 

(3) static数据成员可以是该成员所属的类类型,而非static数据成员只能自身类的引用或者指针。 
(4) static数据成员可以用作类成员函数的默认实参。 
(5) static数据成员的值可以改变。 

二、静态成员和非静态成员的区别: 

(1) 静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类和对象都可以进行访问; 
(2)不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象访问; 
(3) 一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值。 
(4) 静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等。 

三、静态成员函数的特点: 

(1) static 成员函数没有 this 形参,它可以访问所属类的 static 成员,但不能访问非 static 成员。 
(2)static成员函数既可以在类的内部定义,也可以在类的外部定义,在外部定义时,不能重复指定static保留字。 
(3)static成员函数不能声明为虚函数,不能实现动态绑定 
(4)static 成员函数不能声明为const,因为const是针对this是不是const而言的 
(5)构造函数、析构函数不能为静态函数。

猜你喜欢

转载自blog.csdn.net/leikun153/article/details/80867565