分类: C/C++
2008-05-18 20:49:21
来源: | ||
| ||
覆盖 VS 隐藏 在一个函数调用时,其实例的运行时类型决定了实际要调用的具体函数实现;在一个非虚拟函数调用时,实例的编译时类型才是最终的决定因素。 我们可从标准C++中得知,一个虚拟函数的实现,可被继承类中的相应实现所取代,而这个取代的过程被称为"覆盖",其是通过使用override函数修饰符来完成的。鉴于一个虚拟函数的声明引入了一个新的函数,那么,通过提供一个此函数新的实现,一个覆盖函数声明可对继承来的虚拟函数进行专门的细化。需覆盖的函数必须显式声明为virtual。 当一个类重新声明了一个它继承来的函数名称时,由于出现了new函数修饰符,那么可以说这个类,隐藏了父类中的那个名称。 请看例9中的代码,留意变量的定义及在调用成员函数时的使用情况: 例9:
假定有以下代码:
访问限定符 标准C++支持三种成员访问限定符:public、protected、private。为了适应程序集,C++/CLI添加了另外三种,完整地列在下表中: ·public意味着访问不受限制。 ·protected意味着访问受限于包含的类,及任意继承自包含类的类型。 ·private意味着访问受限于包含的类中。 ·internal意味着访问受限于父类程序集。 ·public protected(或protected public)意味着访问受限于父类程序集,及继承自包含类的类型--即使这些类型位于程序集之外。 ·private protected(或protected private)意味着访问受限于父类程序集,及继承自包含类的类型--倘若这些类型是定义在这个程序集内的。 通过对父类施予更严格的访问限定符,成员也能具有更少的可访问性,另外,千万不要混淆成员名可访问性和类型可见性(类型可见性只能为public或private)。 |