69,373
社区成员
发帖
与我相关
我的任务
分享
struct A
{
};
struct B : A
{
};
struct C : A
{
};
void fun(const A* a)
{
const B* b = const_cast<B*>(dynamic_cast<B*>(a));//dynamic_cast、static_cast几种都试过了,都编译不过
cout<<b<<endl();
}
struct A
{
int a;
};
struct B : A
{
int b;
void display() const
{
cout<<b<<endl;
}
};
struct C : A
{
};
inline void fun(const A* a)
{
const B* b = static_cast<const B*>(a);
b->display();
cout<<b<<endl;
}
inline void test()
{
B b;
b.b = 100;
fun(&b);
C c;
fun(&c);
}
这种情况下,用 dynamic_cast会报错,因为类B没有虚函数,不是多态的.
但用static_cast的话,像struct C这里就错了,但它不能检测出来,怎么办呢?
const B* b = static_cast<const B*>(a);
inline void fun(const A* a)
{
A* a1 = const_cast<A*>(a);
const B* b = static_cast<B*>(a1);
cout<<b<<endl;
}
struct A
{
int a;
};
struct B : A
{
int b;
void display() const
{
cout<<b<<endl;
}
};
struct C : A
{
};
inline void fun(const A* a)
{
const B* b = static_cast<const B*>(a);
b->display();
cout<<b<<endl;
}
inline void test()
{
B b;
b.b = 100;
fun(&b);
C c;
fun(&c);
}
这种情况下,用 dynamic_cast会报错,因为类B没有虚函数,不是多态的.
但用static_cast的话,像struct C这里就错了,但它不能检测出来,怎么办呢?[/quote]
基类加虚析构函数//cout<<b<<endl();
cout<<b<<endl;
const B* b = reinterpret_cast<B const*>(a);