c++举例说明this指针的动态类型和静态类型
时间: 2024-02-23 10:02:12 浏览: 186
在C++中,this指针是一个隐式参数,它指向当前对象。this指针的类型既有静态类型,也有动态类型。
静态类型是指指针声明时的类型,即指针所指向的对象的类型,它在编译时就已经确定了,不会发生改变。
动态类型是指指针实际指向的对象的类型,它在运行时才能确定。因为this指针指向的是当前对象,所以它的动态类型就是当前对象的类型。
举个例子,假设有一个类A和它的派生类B:
```c++
class A {
public:
void func() {
cout << "A::func()" << endl;
}
};
class B : public A {
public:
void func() {
cout << "B::func()" << endl;
}
};
int main() {
B b;
b.func(); // 输出 B::func()
A* pa = &b;
pa->func(); // 输出 A::func()
return 0;
}
```
在这个例子中,我们创建了一个B的对象b,并调用它的成员函数func(),输出的是B::func()。接着我们用指向A的指针pa指向b,再调用它的成员函数func(),输出的是A::func()。这是因为在A中的func()函数中,this指针的动态类型是A,而在B中的func()函数中,this指针的动态类型是B,所以输出结果不同。但是,this指针的静态类型在两个函数中都是A*,因为指针pa的静态类型是A*。
阅读全文