MST

星途 面试题库

面试题:C++ 常指针与指针常量混淆点 - 复杂场景

假设有一个类 `MyClass`,在类中有一个成员函数,该函数接收一个常指针(指向 `MyClass` 对象的常指针)作为参数,用于对自身对象与传入对象进行某些属性比较。请实现这个类及其成员函数,并详细说明在函数实现过程中,常指针在保证对象数据不被误修改方面起到了什么作用。
15.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <string>

class MyClass {
private:
    std::string data;
public:
    MyClass(const std::string& d) : data(d) {}

    // 成员函数,接收一个指向MyClass对象的常指针
    bool compareData(const MyClass* const other) const {
        return this->data == other->data;
    }
};

常指针在保证对象数据不被误修改方面的作用:

  1. 指向对象的常指针 const MyClass*:表示指针指向的 MyClass 对象是常量,即不能通过这个指针去修改所指向对象的成员变量(除非成员变量被声明为 mutable)。在 compareData 函数中,other 指针指向的对象不能被修改,这样可以保证传入函数的对象数据的完整性和安全性。例如,如果没有 const 修饰,函数内部可能意外地修改了传入对象的 data 成员变量,这可能导致对象状态的意外改变,破坏程序的逻辑。
  2. 常指针本身 const other:这意味着 other 指针本身不能被重新赋值指向其他对象。在 compareData 函数中,other 指针始终指向传入的那个 MyClass 对象,不会被误操作指向其他对象,进一步保证了函数操作对象的一致性和可预测性。
  3. const 成员函数 compareData(...) const:这里的 const 表明 this 指针所指向的对象在函数执行期间也不会被修改。结合前面指向对象的常指针,确保了函数执行过程中,无论是自身对象(this 指向的对象)还是传入的对象(other 指向的对象)的数据都不会被误修改,使得函数专注于比较操作而不会意外改变对象状态。