C++ 动态转换指向引用的指针和指向指针的引用
我是CPP的新手,正在努力学习动态铸造。不幸的是,我得到以下错误C++ 动态转换指向引用的指针和指向指针的引用,c++,dynamic,casting,C++,Dynamic,Casting,我是CPP的新手,正在努力学习动态铸造。不幸的是,我得到以下错误 main.cpp:在函数“作废打印(A&)”中: main.cpp:30:40:错误:无法将'Ref_A'(类型'class A')动态转换为'class B*'(源不是指针)B*Ref_PTR=dynamic_cast(Ref_A); 如果有人能教我,这是怎么回事 我们可以将引用转换为指针还是指针转换为引用? 我们可以只将基引用转换为派生引用吗? 我们可以只将基指针强制转换为派生指针吗 ====================
main.cpp:在函数“作废打印(A&)”中:
main.cpp:30:40:错误:无法将'Ref_A'(类型'class A')动态转换为'class B*'(源不是指针)B*Ref_PTR=dynamic_cast(Ref_A);
如果有人能教我,这是怎么回事
我们可以将引用转换为指针还是指针转换为引用? 我们可以只将基引用转换为派生引用吗? 我们可以只将基指针强制转换为派生指针吗 ========================================================================
#include <iostream>
#include <exception>
#include <typeinfo>
using namespace std;
class A {
public:
virtual void dummy() {cout<< "Am in Base Class \n"; }
};
class B : public A {
public:
virtual void dummy() {cout<< "Am in first Derived Class \n"; }
};
class C : public B {
public:
virtual void dummy() {cout<< "Am in second Derived Class \n"; }
};
void PRINT(A &);
int main()
{
B b;
C c;
PRINT(b);
PRINT(c);
return 0;
}
void PRINT(A &Ref_A )
{
try
{
B &Ref = dynamic_cast<B&>(Ref_A);
Ref.dummy();
}
catch(std::bad_cast exp) { std::cout<<"Caught bad cast in the Second catch \n"; }
B *Ref_PTR = dynamic_cast<B*>(Ref_A);
if (Ref_PTR)
Ref_PTR->dummy();
//Ref_A.dummy();
}
#包括
#包括
#包括
使用名称空间std;
甲级{
公众:
虚拟空虚拟对象(){cout
我们可以将引用转换为指针还是指针转换为引用
在C++生态系统中,一个引用和一个指针是不同的动物。< /P>
我们可以只将基引用转换为派生引用吗?
我们可以只将基指针强制转换为派生指针吗
通常是的。我们将引用转换为引用或指针转换为指针。但这并不是说我们无法从引用中获取指针。这就是运算符的地址:
B *Ref_PTR = dynamic_cast<B*>( &Ref_A );
B*Ref\u PTR=dynamic\u cast(&Ref\u A);
您可以这样做
B *Ref_PTR = dynamic_cast<B*>(&Ref_A);
B*Ref\u PTR=dynamic\u cast(&Ref\u A);
但这是非常糟糕的,您的类将dummy()
定义为虚拟类,因此您不应该在没有很好的理由的情况下从基类强制转换为派生类
您可以只使用Ref_A.dummy();
,它将从
表达式动态广播(v)
的结果是
将表达式v转换为类型T.T应为指针或
对完整类类型的引用,或“指向cv void的指针”
在代码无效打印(A&Ref\u A)
中
“我们可以将引用转换为指针还是指针转换为引用?”不,这就是的地址和间接运算符的用途。Ref_A是通过引用传递的,但这并不意味着它是指针。错误实际上表示相同的“源不是指针”为什么不只执行Ref_A.dummy()?该函数是虚拟的。无论如何,我编辑了您的代码,使其更易于阅读。如果您对它有强烈的感觉,请回滚。我认为我们可以执行下面的强制转换派生的*p=dynamic\u cast(Base&)。这是正确的还是错误的?这是代码中的语法(&Ref\u a)*Ref\u PTR=dynamic\u cast(&Ref\u a);要从引用中获取指针?@PrasathShanmugakani是。获取引用地址将返回指向被引用对象的指针。
B &Ref = dynamic_cast<B&>(Ref_A);
B *b = dynamic_cast<B*>(&Ref_A); // cast to B*