-
重载、覆盖、隐藏的区别
一、重载(overload)
指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。
(1)相同的范围(在同一个作用域中) ;
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
(5)返回值可以不同;二、重写(也称为覆盖 override)
是指派生类重新定义基类的虚函数,特征是:
(1)不在同一个作用域(分别位于派生类与基类) ;
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有 virtual 关键字,不能有 static 。
(5)返回值相同(或是协变),否则报错;<—-协变这个概念我也是第一次才知道…(6)重写函数的访问修饰符可以不同。尽管 virtual 是 private 的,派生类中重写改写为 public,protected 也是可以的
三、重定义(也成隐藏)
(1)不在同一个作用域(分别位于派生类与基类) ;
(2)函数名字相同;
(3)返回值可以不同;
(4)参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(注意别与重载以及覆盖混淆) 。
(5)参数相同,但是基类函数没有 virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)查看全部 -
111111111
查看全部 -
异常处理捕获
查看全部 -
dynamic_cast 注意;
查看全部 -
cxhsd
查看全部 -
通过父类实例化子类
查看全部 -
老师这点讲错了,delete父类指针,先执行的是子类的析构函数,后执行父类析构函数
查看全部 -
虚析构函数
查看全部 -
捕获异常代码:
查看全部 -
C++的异常处理:
网线未插入or内存不足 等等
try...catch...//尝试,抓住
throw//抛出
抛出的内容复杂时:
常见异常:1、数组下标越界;2、除数为零;3、内存不足
系统常见异常:
查看全部 -
RTTI:运行时类型识别
可分为,typeid和dynamic——cast
查看全部 -
C++中如果抽象类中仅含有纯虚函数而不含有其他任何东西,则称该类为接口类。
查看全部 -
C++纯虚函数的写法:
包含纯虚函数的类叫做抽象类:
查看全部 -
C++中virtual修饰符不能随便使用,
他必须是某一类的成员函数,或者元素
1、不能时普通的函数,
2、不能修饰静态的成员函数;
3、不能修饰内联inline函数;//如果使用编译器会忽视inline,把函数当作纯错的虚函数
4、不能修饰构造函数;
查看全部 -
C++中多态定义:
早绑定,静态多态,在编译前程序便知道使用哪种函数,(函数重载)
晚绑定,动态多态,定义虚函数,知道程序需要使用哪个函数。
查看全部
举报