我如何通过基类指针获得派生类数据成员(向上转换)
How can i get a derived class data member via base class pointer (upcasting)
class Base{
common methods
};
class Derived: public Base{
private:
int a;
char* arr;
public:
Ctor
Dtor
};
int main(){
Base* B;
Derived D;
B = &D;
我如何从B中提取关于D的数据成员的信息?
不介意语法错误,我更关心如何获得数据成员或如何比较两个派生类,如果我有多个派生类
当您知道指针是Derived
时,您可以将指针从Base*
向下转换为Derived*
,最好使用static_cast
。当您不知道,但是基类有一个或多个虚方法时,您可以通过dynamic_cast
检查。但是最好在Base
中有虚拟方法,这样就可以在不强制转换的情况下做任何事情,否则,理想情况下不应该首先丢弃特定的类型信息。
首先需要将其强制转换为派生类型:
假设v2是派生类
的字符串成员。if (auto* d = dynamic_cast<Derived*>(B))
std::cout << "v2: " << d->v2 << std::endl;
在Base中定义虚函数,然后在派生类中实现。有帮助吗?
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 返回带有另一个类的数据成员的构造函数?遇到转换错误?
- 关于Lambdas,转换以功能指针以及私人数据成员的可见性
- 向上转换指向数据成员及其多态行为的指针
- 指向数据成员转换的 Constexpr 指针
- 如何转换 void* 以访问结构的静态数据成员?
- 警告:ISO C++禁止将静态“constexpr char*”数据成员的字符串常量转换为“char*”
- 派生类没有额外的数据成员;将基对象静态向下转换为派生对象是否安全
- 访问C 转换器构造函数中无关类的类的私人数据成员
- 向下转换为没有数据成员"foreign"类
- c++设计:从基类强制转换为派生类,没有额外的数据成员
- Boost Python 不会自动转换 char* 数据成员
- 模板化转换构造函数无法访问受保护的数据成员
- 对每个数据成员应用相同的函数 - 对异构类型进行转换
- 转换为具有相同数据成员布局但实现不同的类是否安全?
- 将指向数据成员的指针转换为void *
- 将 Object int 数据成员转换为浮点数并划分会将奇怪的数据 cout 附加到控制台
- 我如何通过基类指针获得派生类数据成员(向上转换)