- 主题:虚基类指针怎样指向派生类对象的变量
比如A,B都是纯虚基的派生类, 有一个基类指针pC,
pC执行A或B中虚函数没有问题,有没有办法能不能pC访问A,B中的变量,比如A中的a,B中的b
我的应用场景是:A,B其实都是些结构体,想利用多态变成class,但其实还是当做struct使用,
有人建议用一系列的get,set虚函数来实现,这个不现实,A,B的结构完全不一样,而且数目很多
--
FROM 211.103.207.*
做downcast?
--
FROM 123.115.133.*
dynamic cast,这种是不是在基类定义个type函数,然后根据type类型来转好些。
--
FROM 221.222.122.*
class Base {};
class A : public Base { int a; }
class B : public Base { int b; }
Base* p = new A;
p->a
再不抢reinterpret_cast也没了,这个cast呢,make an object by pouring liquid metal, plastic etc into a mould (=hollow container)
--
FROM 106.121.134.*
不合理需求。
或者说,你想当成结构体用的,就不应该搞虚基类和继承。
C++的类有两种:
1. 值类型。这就相当于一个结构体,装的是数据,一般没有继承和虚函数。
2. 事务逻辑类型。这就相当于一个“对象”,封装的是状态和行为,一般不能拷贝。
这两种最好不要混用。
【 在 cheaper2005 (cheaper and more powerful) 的大作中提到: 】
: 标 题: 虚基类指针怎样指向派生类对象的变量
: 发信站: 水木社区 (Wed Jun 3 23:31:31 2020), 站内
:
: 比如A,B都是纯虚基的派生类, 有一个基类指针pC,
: pC执行A或B中虚函数没有问题,有没有办法能不能pC访问A,B中的变量,比如A中的a,B中的b
:
: 我的应用场景是:A,B其实都是些结构体,想利用多态变成class,但其实还是当做struct使用,
: 有人建议用一系列的get,set虚函数来实现,这个不现实,A,B的结构完全不一样,而且数目很多
:
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 211.103.207.*]
--
FROM 76.126.252.*
不用吧,直接转就行,
用之前判断一下指针是否是空
【 在 lushan5436 的大作中提到: 】
:
: dynamic cast,这种是不是在基类定义个type函数,然后根据type类型来转好些。
:
: --
发自「今日水木 on PCT-AL10」
--
FROM 101.84.166.*
有很多方法可以做到,但C++编码规范极力避免这样做
【 在 cheaper2005 的大作中提到: 】
: 比如A,B都是纯虚基的派生类, 有一个基类指针pC,
: pC执行A或B中虚函数没有问题,有没有办法能不能pC访问A,B中的变量,比如A中的a,B中的b
: 我的应用场景是:A,B其实都是些结构体,想利用多态变成class,但其实还是当做struct使用,
: ...................
--
FROM 121.69.79.*
需要downcast的、需要用到RTTI来判断的,都有点bad smell,通常是design有点问题
--
FROM 123.115.133.*
基类加一个map?A和B初始化的时候把成员变量指针做个映射?然后通过一个get/set来对名称key对应的成员变量赋值?
--
FROM 39.144.18.*
从没有说过能虚函数指针能指向派生类变量的。
你强转派生类后,自然能访问派生类成员变量。但这跟虚函数表没有半毛钱关系,有没有虚表这个机制都是成立的。
【 在 cheaper2005 的大作中提到: 】
:
: 比如A,B都是纯虚基的派生类, 有一个基类指针pC,
: pC执行A或B中虚函数没有问题,有没有办法能不能pC访问A,B中的变量,比如A中的a,B中的b
:
: 我的应用场景是:A,B其实都是些结构体,想利用多态变成class,但其实还是当做struct使用,
--
FROM 114.242.250.*