1.C++中的多态有哪几种?
·编译时的多态
·运行时的多态
2.C++中多态的表现形式主要有哪几种?
·函数重载
·运算符重载
·虚函数
3.这三种是属于哪种多态?
运行时的多态主要通过虚函数来实现,而编译时的多态与运算符重载和函数重载来实现
4.哪些运算符可以重载?
“+”,“-”,“*”,“/”,“%”等除了“.”“.*”“::”sizeof和三目运算符以外C++中所有自带的运算符都可以重载。
5.合法的运算符重载有哪些限制?
(1) 重载之后的运算符不能改变运算符的优先级和结合性;
(2) 重载之后的运算符不能改变运算符操作数的个数及语法结构;
(3) 重载的运算符操作数至少有一个是自定义类型的;
(4) 重载运算符函数通常不能有默认的参数。
6.当运算符重载为类的成员函数时,应注意什么?
(1)函数的参数个数要比原来的操作数少一个左操作数(成员函数用this指针隐式地访问了一个对象,后置单目运算符不需要显式说明参数)。
(2)调用成员函数运算符的标准格式:
<对象名>.operator<运算符>(<参数>) <=> <对象名><运算符><参数>
如: m.operator+n <=> m+n
(3)除 =、()、[ ]、->不能重载为类的友员函数外其他运算符都可以重载为类的成员或友员函数。
7.虚继承的作用?
多重继承时,如:D继承自类B和类C,而类B、C继承自类A,当把类B和C定义为对A的虚继承时,类A、B、C、D共享同一份变量或函数。如:
d.D::a;可以用以下表示:
d.A::a;
d.B::a;
d.C::a;
8.父类和子类对象之间的赋值有什么限制?
·有公有继承关系的对象间才可以赋值
·子类对象可以给父类对象赋值
·父类对象不可以给子类对象赋值
·若想父类对象给子类对象赋值,可以强制类型转换(很危险)
9.重载、覆盖以及隐藏有什么区别?
重载通常指函数重载,表示在一个类中,函数名相同而参数不同,称为函数重载;
覆盖是指子类覆盖父类的函数,覆盖的要求是函数名相同,参数相同,并且父类函数必须有virtual关键字,如果没有就构不成覆盖;
隐藏是指子类函数屏蔽了其同名的父类函数或变量,子类的函数或变量可以通过子类对象直接访问,父类的公有函数或变量通过如下形式访问:
子类对象.父类::父类公有函数或变量
10.虚函数有什么特点?
·使用虚函数时,存在子类公有继承自父类才有意义
·如果在父类中显式声明函数为虚函数,在子类中同名同参的函数即使没有显式声明为虚函数,它也是虚函数
·虚函数必须是所在类的,不能是友员函数和静态成员函数
·构造函数不能是虚函数,但析构函数可以是虚函数