1. C++语言问题
1. Java用接口代替C++中多继承,有什么优势?
- 避免像C++那样出现多继承而导致的关系混乱。
C++多重继承的优缺点
一些事物往往会拥有两个或两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念。
- 多重继承的优点是对象可以调用多个基类中的接口。
- 多重继承的缺点是容易出现继承向上的二义性。
参考: http://blog.sina.com.cn/s/blog_5396eb530100mtc9.html
2. 覆盖与重载,重载返回值类型可以改变吗?
覆盖是发生在子类和基类之间的方法的重写,是类与类之间多态的一种表现的形式。
重载发生在类内,属于类内多态,指一个类可以拥有多个同名的函数,但是函数参数要求不一样。C++编译器在处理重载函数时是根据函数(作用域+函数名+参数列表参数类型)来重新生成新的函数名。
参考:https://www.cnblogs.com/liubo1/p/5925746.html
https://blog.csdn.net/chary8088/article/details/7255010
https://blog.csdn.net/gogogo_sky/article/details/72807123 (这个不错)
3. explicit什么作用?什么是隐式类型转换?
explicit用于构造函数,抑制隐式转换的发生。
显式转换也叫强制转换,是自己主动让这个类型转换成别的类型。
隐式转换是编译器自动转换的。
effective c++中说:被声明为explicit的构造函数通常比其non-explicit兄弟更受欢迎。因为它们禁止编译器执行非预期(往往也不被期望)的类型 转换。除非我有一个好理由允许构造函数被用于隐式类型转换,否则我会把它声明为explicit。我鼓励你遵循相同的政策。
参考:https://www.cnblogs.com/pityhero233/p/8146585.html
https://www.cnblogs.com/liushui-sky/p/6281630.html
https://www.cnblogs.com/joinclear/p/3850076.html