面试题目不难很基础的,但是做的不好,自己太毛糙了,不够了冷静,不够认真对待这件事!
1、
运行结果如下:
2、虚函数与纯虚函数的区别,以及各自的用途?
虚函数是派生类 "可以 "修改的成员函数。
纯虚函数是派生类 "必须 "修改的成员函数。
虚函数的要求:
1,只有类的成员函数才能说明为虚函数,这是因为虚函数仅适用于有继承关系的类对象。
2,静态成员函数不能是虚函数,因为静态成员函数不受限于某个对象。
3,内联函数不能是虚函数,因为内联函数是不能在运行中动态确定其位置的。即使虚函数在类的内部
定义,编译时,仍将其看作非内联的。
因为内联是在编译期决定的,而且直接展开为代码,而虚函数是在运行期决定的
4,构造函数不能是虚函数,因为构造时,对象还是一片未定型的空间。
5,析构函数可以是虚函数,而且通常声明为虚函数。
抽象类:含有纯虚函数的类称为抽象类,virtual fun() = 0; 抽象类不能实力化.。它仅仅用来抽象出一层方法描述,不必实现,所以对其实例化没有任何意义。
如果我们不希望在类里出现某个对象的表现,利用抽象类可以推迟描述知道其某个派生类中。
而有虚函数的类是可以实例化,主要用于RTTI机制。实现多态
3、类的定义和类的声明的区别
声明不产生实际的目标代码,它的作用是告诉编译器
由于声明不产生实际代码,所以可以有多个重复声明的存在。
类,其实是数据类型的定义,和struct、enum的定义没有区别,
1、类型定义和对象定义是有区别的:
类型定义的作用范围和enum的定义是一样,类似const对象的默认作用域,文件内部作用域,所以即使被多个.c文件包含进去也不会发生类类型重定义,除非被一个c文件多次展开,多次展开的情况才用#ifndef _H_ #define _H_头文件哨兵避免,
但是非const对象定义就不同了,默认是extern作用域,所以被多个c文件包含就会发生对象重定义,用不用头文件哨兵都一样,这一点都没有回答到。
2、class A
{
....
};
是类型定义,也同时进行了一个类型声明,所以在很多书上直接说声明一个类,稍微不严谨;
class A;才是单纯类型声明,声明只是说明一个名字在此处用到,所以可以重复声明。