我有一个继承自A类的A类和B类.B类有一个变量和一个在A类中不可用的函数。我做了一个指针
A* ptr=new B();
那么ptr如何访问属于B类的变量和函数?
答案 0 :(得分:1)
A类根本不能"看" B类的功能。相反,您必须使用类似于A到B的dynamic_cast,检查null,然后按照您的喜好继续操作。 Here is a nice tutorial to explain this a lot better than I can.每个演员都有其优点和缺点;好好学习。另外,尽量避免C风格转换。
编辑:似乎我误解了这个问题。答案仍然是正确的。 A类将无法"看到" B类的变量。铸造仍然允许你访问它们。答案 1 :(得分:0)
您可以强制派生类实现在基类中定义的纯虚方法:
class A
{
public:
virtual void do_things() = 0;
};
class B : public A
{
public:
virtual void do_things()
{
//Implementation
}
};
这样,您可以通过指针A*
调用B类实现的方法:
A* a_ptr = new B();
//The method implemented in class B will be called
a_ptr->do_things();
您还可以假设a_ptr
指向B类的对象。如果a_ptr
未指向B
,dynamic_cast<B*>
返回的指针将是nullptr
。如果static_cast<B*>
中没有虚拟方法,则可以使用A
。
b_ptr = dynamic_cast<B*>(a_ptr);
b_ptr->do_things;
这样,您不需要A类中的纯虚函数。
答案 2 :(得分:-1)
实际上,动态强制转换只适用于多态类(虚拟关键字),并且最常用于向下转换,你在这里尝试做的是&#34; upcast&#34;它始终有效,可以使用static_cast进行公共继承。