继承可见性:
c++中 public protected private 三种可见性可以分别理解为
完全对外公开,只对子类公开,完全不公开,这里对子类的可见性是完全不受继承时的可见性影响的,就是说无论是public,protected还是private继承,父类public protected属性在子类中时永远可见的,private时永远不可见的。
那么三种继承的可见性就可以理解为:
将可见的属性继承为public属性(public继承)
将可见的属性继承为protected属性(protected继承)
将可见的属性继承为private属性(private属性)
参考文档:
http://www.cnblogs.com/motadou/archive/2010/03/12/1683974.html
多态:
父类中声明的虚函数:非纯虚函数和纯虚函数,在子类中进行重写。当使用父类指针的时侯可以根据虚函数表自动调用符合当前对象的函数。抽象地来说就是多态(polymorphism)就是在c++中使用同一份源码编译出来的程序可以在执行的过程中有不同的行为。就目前我的理解来看,多态就是在使用指针的时候可以正确的使用自身类的函数就算是指针类型不是自己的类型。
只有声明了virtual的函数才能有多态的特性,如果是直接覆盖的话是没有多态的特性的,从外界运行的角度来看,只会调用当前指针所属类型的相应函数。
在c++11里新增了override保留字,可以在子类重写父类虚函数的时候在函数末尾添加override,同样也可以不添加。功能就是提高了代码的可读性,如果不是重写父类虚函数的时候用了override的时候编译器会直接报错,没有override的时候编译器会认为是一个新的函数而通过编译。
在使用的过程中使用同一继承路径下的指针指向另一个对象的时候,比如下面的继承关系:
A-B-C-D,其中A是父类,D是子类
A* ptr= &d_obj;
在这种情况下,在储存的过程中d_obj这个对象仍然是D类。但是在所有外界来看这个ptr就是一个A类的指针,是无法看到BCD派生的部分的,例外的情况仅出现在使用多态的情况下会查找虚函数表,除此之外行为和A类对象,即使是最后的delete操作。
以上纯属个人观点,保证客观正确但不保证概括全面,如果有错误请指出