c++中类的对象通过将this指针传递给类的成员函数来调用方法

  1. 定义类

    • 首先你需要定义一个类,并在这个类中声明一些成员函数。
    class MyClass {
    private:
        int value;  // 私有成员变量
    
    public:
        // 构造函数
        MyClass(int v) : value(v) {}
    
        // 成员函数
        void displayValue() const {
            std::cout << "The value is: " << value << std::endl;
        }
    };
  2. 创建对象

    • 使用类名加上括号来创建类的一个实例。如果构造函数需要参数,则需提供相应的参数。
    MyClass myObject(10);  // 创建MyClass的一个实例
  3. 通过点操作符调用成员函数

    • 使用.操作符来访问对象的公共成员函数。如果成员函数是const的,则可以在常量对象上调用它。
    myObject.displayValue();  // 调用myObject实例的displayValue方法
  4. 内部机制

    • 当你通过对象调用成员函数时,C++编译器会生成一段代码,这段代码将对象的地址作为隐含的第一个参数传递给成员函数。这就是为什么成员函数通常会有一个隐式的this指针。
    • this是一个指向当前对象的指针,允许成员函数访问该对象的数据成员和其他成员函数。
    • 在上面的例子中,虽然你在displayValue函数定义中没有看到this指针,但实际上编译器会处理这个隐式参数。你可以显式地使用this指针,例如:std::cout << "The value is: " << this->value << std::endl;
  5. 虚函数和动态绑定

    • 如果类中有虚函数(virtual functions),那么当通过基类指针或引用调用这些函数时,将会发生动态绑定。这意味着实际调用哪个版本的函数是在运行时决定的。
    class Base {
    public:
        virtual void foo() { std::cout << "Base::foo" << std::endl; }
    };
    
    class Derived : public Base {
    public:
        void foo() override { std::cout << "Derived::foo" << std::endl; }
    };
    
    Base* basePtr = new Derived();
    basePtr->foo();  // 输出 "Derived::foo"
    delete basePtr;
    • 在这个例子中,尽管basePtr是指向Base类型的指针,但由于foo被声明为虚函数,所以实际上调用了Derived类中的foo函数。
  6. 内存布局

    • 对象的内存布局通常包含其数据成员。如果有虚函数的话,对象还会包含一个指向虚函数表(vtable)的指针。vtable中存放了指向各个虚函数的指针,这使得多态成为可能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值