找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 118|回复: 0

desc() isKindOf() cast() isA() 区别和用法

[复制链接]

1

主题

0

回帖

37

积分

管理员

积分
37
发表于 2024-5-2 22:33:44 | 显示全部楼层 |阅读模式
  1. 基础知识:
  2. a 正常情况下,基类指针调用基类成员(成员变量和成员函数);派生类指针调用派生类成员
  3. b 公有派生时基类指针允许指向派生类对象,但只能调用派生类继承自基类的成员而不能访问扩展部分成员
  4. c 以私有派生时,基类指针不允许指向派生类对象
  5. d 派生类指针不允许指向基类对象
  6. 另:基类的指针可以强制转换为派生类指针,反之不可。
  7. 静态成员函数只能对类内静态数据成员访问,也允许调用另一个静态成员函数,但不能访问其它成员。
  8. 公有的和保护的静态成员可以被继承,此时基类对象和派生对象共享静态成员。
  9. AcRxClass是ARX所有类的基类
  10. //desc()  isKindOf()  cast() isA()定义
  11. static AcRxClass *   desc();
  12. inline bool  isKindOf( const AcRxClass * aClass ) const;
  13. virtual AcRxClass *  isA() const;
  14. static AcRxObject *  cast( const AcRxObject * inPtr);
  15. //下面看如下代码
  16. AcDbEntity *pEnt = NULL;
  17. AcDbObjectId ObjId = ObjId::kNull;
  18. acdbOpenObject(pEnt,ObjId,AcDb::kForRead,Adesk::kFalse);
  19. //判断是否为单行文本类型
  20. if(pEnt->isKindOf(AcDbText::desc()))
  21. {
  22.     AcDbText *pText=AcDbText::cast(pEnt);//pEnt这时指的已经是AcDbText类
  23. }
  24. 上面代友中用到了 desc() isKindOf() cast() 三个函数:
  25. pEnt 是AcDbEntity类型的指针,AcDbEntity是AcDbText的父类,在acdbOpenObject函数中,它指向了它的某一个子类,按基础知识判断,是允许的。
  26. isA()函数无传入参数,返回不是bool型,^采用^,虽然它的名字看起来有点象。其实它的功能和 desc()很像,只是它返回的值是 this所特指的类
  27. //isA()的示例
  28. AcDbEntity *pEnt = NULL;
  29. AcDbObjectId ObjId = ObjId::kNull;
  30. acdbOpenObject(pEnt,ObjId,AcDb::kForRead,Adesk::kFalse);
  31. //判断实体,如果不是SPLine类型则返回
  32. if(pEnt->isA() != AcDbSpline::desc())
  33. {
  34.     pEnt->close();
  35.     return;
  36. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2025-1-4 12:51 , Processed in 0.120166 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表