在c++中静态类型与动态类型的差别
时间: 2024-03-16 10:42:14 浏览: 70
在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()"。可以看到,通过使用动态类型,可以实现不同对象的动态绑定,实现多态。
阅读全文