关于以下C++程序:
class Base { };
class Child : public Base { };
int main()
{
// Normal: using child as base is allowed
Child *c = new Child();
Base *b = c;
// Double pointers: apparently can't use Child** as Base**
Child **cc = &c;
Base **bb = cc;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
GCC在最后一个赋值语句中产生以下错误:
error: invalid conversion from ‘Child**’ to ‘Base**’
Run Code Online (Sandbox Code Playgroud)
我的问题分为两部分:
reinterpret_cast.使用这些演员表意味着抛弃所有类型的安全.有没有什么我可以添加到类定义中来隐式地转换这些指针,或者至少以允许我使用的方式表达转换static_cast?为什么基地无法deriv进入deriv?该程序编译class deriv : public base.
#include <cstdio>
class base
{
};
class deriv : base
{
public:
void f(deriv, int){printf("deriv::f(deriv, int)\n");}
void f(base){printf("deriv::f(base)\n");}
};
int main()
{
deriv d;
d.f(d);
}
17: error: ‘base’ is an inaccessible base of ‘deriv’
17: error: initializing argument 1 of ‘void deriv::f(base)’
Run Code Online (Sandbox Code Playgroud)
因为两个人已经弄错了,我会粗体问:为什么base需要公开继承?它仅从内部访问deriv.