c++ - 为什么要在类定义中使用指针?

标签 c++ class oop pointers

一开始我对指针的理解很薄弱,但我很难找到类定义中需要它们的确切原因。

我知道指针是一种变量,指向另一个变量的内存地址。这就是我真正理解的起点和终点。

但是,我不可能在这个派生类的开头看到它们的用途:

class Circle : public Shape {

  private: int* radius;

  ....
  ....

}

为什么 radius 是指针?这有什么用?

最佳答案

指针的用例基于以下事实:指针指向同一内存位置的两个对象可以通过该内存进行通信。

三个主要目的是:

  • 沟通本身(参见下面的示例)
  • 经济:如果您的函数需要一些 BigFatObject 作为参数,那么您声明此参数的类型为 BigFatObject*。这样您就可以将堆栈使用量从 sizeof(BigFatObject)(可能很大)减少到 sizeof(void*)(通常只有 4/8 字节)
  • 将大的无所不能的对象分解为更简单的对象的图形。在那种情况下,需要一些其他对象来完成其工作的对象将持有指向所需对象的指针

例如:

class SharedObject
{
public:
  int getValue() { return value; }
  void setValue(int value) { this->value = value; }  

private:
    int value;
};

class CommunicatesThroughSharedObject
{
public:
    CommunicatesThroughSharedObject(SharedObject *shared)
    {
        this->shared = shared;
    }

private:
    SharedObject *shared;
};

SharedObject shared;
CommunicatesThroughSharedObject c1(&shared), c2(&shared);

现在你可以让 c1c2 通过调用它们的 shared 变量的 getValuesetValue 进行通信 方法

关于c++ - 为什么要在类定义中使用指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22433822/

相关文章:

php - 我如何从带有变量的类中调用方法?

c++ - 将对象指向 NULL 会将成员值置于什么位置?

java - Collections.unmodifiableMap(和其他)是否违反了 SOLID 原则?

python - 在python中使用自定义命令制作数据库

Python - 这是调用父类(super class)方法的更好方法?

Python 类不工作

c++ - 一个跟踪插入顺序的 std::map ?

iphone - 为什么这个C++(cocos2d,box2d)例子给出的是指针而不是值?

c++ - Visual Studio 2013 如何检测缓冲区溢出

c++ - std::to_string 不是使用 CygWin 的 C++11 中的成员