[C++] 对象的静态类型和动态类型

由于继承导致对象的指针和引用具有两种不同的类型:静态类型和动态类型。
静态类型:指针或者是引用声明时的类型。
动态类型:由实际指向的类型确定。

GameObject *pgo = new SpaceShip // pgo 静态类型是 GameObject*, 动态类型是 SpaceShip*
Asterioid *pa = new Asterioid;  // pa 的静态类型是 Asterioid *, 动态类型也是 Asterioid *
pgo = pa;                       // pgo 静态类型总指向 GameObject *, 动态类型指向 Asterioid *
GameObject &rgo = *pa;          // rgo 的静态类型是 GameObject, 动态类型是 Asterioid




C++基础之:对象的静态类型和动态类型

C++中,静态类动态类型的概念和区别与其他编程语言类似。 静态类是指在编译期就可以确定的变量类型,变量的类型在编译时就已经确定,编译器会对变量类型进行检查,如果类型不匹配会报错。C++中的变量类型可以使用关键字来指定,例如int、float、double等。 动态类型是指在运行期才能确定的变量类型,变量的类型在编译时不会进行检查,而是在运行时根据实际情况来确定变量类型C++中通过使用指针或引用来实现动态类型,可以将指向派生类的指针或引用赋值给指向基类的指针或引用,实现多态。 下面是一个使用静态类动态类型的例子: ``` #include <iostream> using namespace std; class A { public: void func() { cout << "A::func()" << endl; } }; class B : public A { public: void func() { cout << "B::func()" << endl; } }; int main() { A a; // 静态类为A B b; // 静态类为B A* pa = &a; // 静态类为A,动态类型为A pa->func(); // 输出 "A::func()" pa = &b; // 静态类为A,动态类型为B pa->func(); // 输出 "B::func()" return 0; } ``` 在上面的代码中,A和B是两个类,B是从A派生而来的。在main函数中,首先定义了一个静态类为A的对象a和一个静态类为B的对象b。然后定义了一个指向A的指针pa,并将其指向a,此时pa的动态类型也是A。调用pa的func函数,输出"A::func()"。 接着将pa指向b,此时pa的动态类型变为B。再次调用pa的func函数,输出"B::func()"。可以看到,通过使用动态类型,可以实现不同对象动态绑定,实现多态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值