MST

星途 面试题库

面试题:C++中成员函数如何区分不同对象的数据

在C++ 中,假设有一个类 `MyClass` 包含成员变量 `int data;` 和成员函数 `void printData();`,请解释 `printData` 函数是如何区分不同 `MyClass` 对象中的 `data` 成员的。并且通过代码示例说明,当有两个 `MyClass` 对象 `obj1` 和 `obj2`,它们的 `data` 值不同时,`printData` 函数如何正确输出各自对象的 `data` 值。
45.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. printData 函数区分不同 MyClass 对象中 data 成员的原理
    • 在C++ 中,非静态成员函数(如 printData)都隐含一个 this 指针。当通过某个对象调用成员函数时,该对象的地址会作为 this 指针传递给成员函数。printData 函数内部实际上是通过 this 指针来访问所属对象的 data 成员的。不同对象调用 printData 函数时,传递的 this 指针不同,所以 printData 函数能区分不同对象中的 data 成员。
  2. 代码示例
#include <iostream>

class MyClass {
private:
    int data;
public:
    MyClass(int value) : data(value) {}
    void printData() {
        std::cout << "The data value of this object is: " << data << std::endl;
        // 实际上可以写成 std::cout << "The data value of this object is: " << this->data << std::endl;
    }
};

int main() {
    MyClass obj1(10);
    MyClass obj2(20);

    obj1.printData();
    obj2.printData();

    return 0;
}

在上述代码中,obj1obj2MyClass 的两个不同对象。当 obj1.printData() 被调用时,this 指针指向 obj1,函数输出 obj1data 值(10);当 obj2.printData() 被调用时,this 指针指向 obj2,函数输出 obj2data 值(20)。