C++中 type_id 的作用

本文通过一个简单的C++示例介绍了如何使用typeid来确定对象的实际类型,并探讨了虚函数对于多态性和typeid有效性的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

typeid 能动态的寻找当前的对象,实现多态,例如:
...
#include<typeidinfo>

class base
{
public:
  void iam()
  {
    cout << typeid(*this).name() << endl;
  }

  virtual void polo()
  {
    cout << "OK" << endl;
  }
};

class base1 :public base
{
  /* 
public:
  virtual void iam()
  {
    cout << "base1" << endl;
  }
  */
 
};

int main(void)
{
  base a;
  base1 b;
 
  a.iam();
  b.iam();
}

将各自显示各自的类名称。

1.如果在父类中没有虚函数virtual void polo,则父类不再具有多态性质,则typeid也将不再发生作用 

### C++ UI 组件类型的实现与使用 #### 定义 QML 类型来自定义 C++ 类 为了使自定义的 C++ 类可以在 QML 中作为组件类型使用,需要通过特定的方式注册这些类。这涉及到创建新的 QML 可用类型以及暴露属性给 QML 使用。 ```cpp #include <QObject> class MyCppClass : public QObject { Q_OBJECT public: explicit MyCppClass(QObject *parent = nullptr); // Expose properties to QML Q_PROPERTY(QString myProperty READ getMyProperty WRITE setMyProperty NOTIFY propertyChanged) signals: void propertyChanged(); private slots: QString getMyProperty() const; void setMyProperty(const QString &value); }; ``` 上述代码展示了如何声明一个继承 `QObject` 的 C++ 类,并利用宏 `Q_PROPERTY` 来向 QML 暴露成员变量[^1]。 #### 注册新类型到 QML 引擎 为了让 QML 认识并能够实例化这个 C++ 类,还需要将其注册至 QML 引擎: ```cpp qmlRegisterType<MyCppClass>("com.example", 1, 0, "MyCppType"); ``` 这段代码的作用是在命名空间 `"com.example"` 下注册版本号为 `1.0` 的 `MyCppClass` 类,在 QML 文件里可以通过名称 `MyCppType` 创建对象。 #### 在 QML 中使用已注册的 C++ 类型 一旦完成以上步骤,就可以像下面这样在 QML 脚本中引入和操作该类型了: ```qml import com.example 1.0 Item { MyCppType { id: cppComponent onPropertyChanged: console.log("Property changed:", myProperty) } } ``` 这里展示了一个简单的例子,其中导入了之前定义好的模块,并且创建了一个名为 `cppComponent` 的组件来监听其内部某个属性的变化事件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值