this指针

this

每个对象创建后,会有个指向自己的指针常量,这个指针是this指针。

C++规定类的成员变量和成员函数分开存储,每个类对象有单独的成员变量,但是会共用成员函数。相同类的不同对象调用共用函数时,使用的成员数据是不同的,怎样分清楚呢?实际上,编译器会自动在每个非静态成员函数内部生成一个this指针。this指针指向被调函数所属的对象。this指针实现了类的封装特性,把数据和函数连接起来。

case

#include<iostream>

class C {
    public:
        int x=10;
        int getA() {  std::cout << typeid(*this).name() << std::endl; return x; }
};
class C1 : public C {
    public:
        int x=100;
        int getB() {  std::cout << typeid(*this).name() << std::endl; return x; }
};
int main() {
    C1 c;
    std::cout << c.getB() << std::endl;
    std::cout << c.getA() << std::endl;
    return 0;
}

输出的两个值是100,10

class CDocument {
    public:
        virtual void Serialize() {
            std::cout << "CDocument Serialize" << std::endl;
        }
        void OnFileOpen() {
            Serialize();
        }
};
class CMyDoc : public CDocument{
    public:
        virtual void Serialize() {
            std::cout << "CMyDoc Serialize" << std::endl;
        }
};
int main() {
    CMyDoc doc;
    doc.OnFileOpen();
    return 0;
}

输出的结果是:CMyDoc Serialize

每个类的每个非静态成员函数都会有一个默认的class* this参数。在对象调用函数时,会默认加上&object。

对于1,getA()会得到C1类的对象c的地址,但是会向上转换为C类,取得C的成员变量x;

对于2,和1一样,发生了多态。

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top