gpt4 book ai didi

c++ - 动态转换指向引用的指针和指向指针的引用

转载 作者:行者123 更新时间:2023-11-30 02:20:22 25 4
gpt4 key购买 nike

我是 CPP 的新手,正在尝试学习动态转换。不幸的是,出现以下错误

main.cpp: In function 'void PRINT(A&)':
main.cpp:30:40: error: cannot dynamic_cast 'Ref_A' (of type 'class A') to type 'class B*' (source is not a pointer) B *Ref_PTR = dynamic_cast<B*>(Ref_A);

如果有人能教我,这是怎么回事?

我们可以将引用转换为指针或将指针转换为引用吗?我们可以只将 Base 引用转换为 Derived 引用吗?我们可以只将 Base 指针转换为派生指针吗?

============================================= =========================

#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();
}

最佳答案

Can we cast reference to pointer or pointer to reference ?

没有。引用和指针是 C++ 类型生态系统中的不同野兽。

Can we cast only Base reference to Derived reference ? Can we cast only Base pointer to derived pointer ?

通常是的。我们将引用转换为引用或将指针转换为指针。但这并不是说我们不能从引用中获取指针。这就是 address-of 运算符的用途:

B *Ref_PTR = dynamic_cast<B*>( &Ref_A );

关于c++ - 动态转换指向引用的指针和指向指针的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49789879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com