jma*_*erx 6 c++ polymorphism casting
假设我有一个名为的类Base和一个派生自它的类SuperBase.鉴于add接受a Base*,其中任何一个都是有效的:
SuperBase *super = new SuperBase;
bases.add(super);
Run Code Online (Sandbox Code Playgroud)
要么
SuperBase *super = new SuperBase;
bases.add((Base*)super);
Run Code Online (Sandbox Code Playgroud)
第一个作品只要通过从派生到基础的隐式转换SuperBase公开衍生Base:
struct base { virtual ~base() {} };
struct derived : base {};
base* b = new derived; // okay
Run Code Online (Sandbox Code Playgroud)
第二个也有效,但忽略了对Base以下内容的保护:
struct derived : private base {}; // private base
base* b = new derived; // not okay, base is private
base* b = (base*)(new derived); // okay, but gross
Run Code Online (Sandbox Code Playgroud)
如果是的话private,你可能不应该投它.