Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将基类的双指针强制转换为派生类的双指针?_C++_Inheritance_Dynamic Cast_Double Pointer - Fatal编程技术网

C++ 如何将基类的双指针强制转换为派生类的双指针?

C++ 如何将基类的双指针强制转换为派生类的双指针?,c++,inheritance,dynamic-cast,double-pointer,C++,Inheritance,Dynamic Cast,Double Pointer,如果我将双指针传递给类或函数,如何将其转换为派生类型的双指针或对派生类型指针的引用,以便访问其成员 class A { }; class B : public A { public: void Method() {}; }; A *a_ptr = new B{}; void Function(A *const *a_ptr_ptr) { B *const &b_ptr_ptr = dynamic_cast<B *const>(*a_ptr_ptr);

如果我将双指针传递给类或函数,如何将其转换为派生类型的双指针或对派生类型指针的引用,以便访问其成员

class A
{

};

class B : public A
{
public:
    void Method() {};
};

A *a_ptr = new B{};

void Function(A *const *a_ptr_ptr)
{
    B *const &b_ptr_ptr = dynamic_cast<B *const>(*a_ptr_ptr);
    b_ptr_ptr->Method();
};

int main()
{
    Function(&a_ptr);
}
A类
{
};
B类:公共A
{
公众:
void方法(){};
};
A*A_ptr=新的B{};
空函数(A*const*A_ptr_ptr)
{
B*常数和B_ptr_ptr=动态投射(*a_ptr_ptr);
b_ptr_ptr->Method();
};
int main()
{
功能(&a_ptr);
}
如果我将双指针传递给一个类或函数,我如何将它转换为派生类型的双指针或对派生类型指针的引用

你不能

这样我就可以访问它的成员了

class A
{

};

class B : public A
{
public:
    void Method() {};
};

A *a_ptr = new B{};

void Function(A *const *a_ptr_ptr)
{
    B *const &b_ptr_ptr = dynamic_cast<B *const>(*a_ptr_ptr);
    b_ptr_ptr->Method();
};

int main()
{
    Function(&a_ptr);
}
您不需要指向访问成员的指针。你需要的是一个指针。您可以通过间接指向指针来获得它。事实上,这就是您在示例程序中所尝试的。该程序的问题是,您无法将指针动态转换为非多态类型,例如
A
。您可以通过使
A
多态或使用
static\u cast
-在无法验证传递的指针是否确实指向
B
的底部的情况下修复此问题

或者,您可以通过该对象间接转换并转换引用,而不是转换为指向对象的指针。例如:

assert(a_ptr_ptr && *a_ptr_ptr):
B& b = static_cast<B&>(**a_ptr_ptr);
b.Method();
assert(a_ptr_ptr&&*a_ptr_ptr):
B&B=静态铸件(**a\U ptr\U ptr);
b、 方法();
如果我将双指针传递给一个类或函数,我如何将它转换为派生类型的双指针或对派生类型指针的引用

你不能

这样我就可以访问它的成员了

class A
{

};

class B : public A
{
public:
    void Method() {};
};

A *a_ptr = new B{};

void Function(A *const *a_ptr_ptr)
{
    B *const &b_ptr_ptr = dynamic_cast<B *const>(*a_ptr_ptr);
    b_ptr_ptr->Method();
};

int main()
{
    Function(&a_ptr);
}
您不需要指向访问成员的指针。你需要的是一个指针。您可以通过间接指向指针来获得它。事实上,这就是您在示例程序中所尝试的。该程序的问题是,您无法将指针动态转换为非多态类型,例如
A
。您可以通过使
A
多态或使用
static\u cast
-在无法验证传递的指针是否确实指向
B
的底部的情况下修复此问题

或者,您可以通过该对象间接转换并转换引用,而不是转换为指向对象的指针。例如:

assert(a_ptr_ptr && *a_ptr_ptr):
B& b = static_cast<B&>(**a_ptr_ptr);
b.Method();
assert(a_ptr_ptr&&*a_ptr_ptr):
B&B=静态铸件(**a\U ptr\U ptr);
b、 方法();