将 Data 实例表示为 C++ 链表中的指针

问题描述 投票:0回答:1

假设我们是一家汽车制造商,并且我们有一个抽象的

Part
类,如下所示:

class Part {
    // notice that that all methods are const methods.
public:
    Part():itsPartNumber(1) {}
    Part(int PartNumber):itsPartNumber(PartNumber) {}
    virtual ~Part() {};
    int GetPartNumber() const { return itsPartNumber; }
    virtual void Display() const = 0;
private:
    int itsPartNumber;
};

这将是链表中的数据类,其中节点如下所示。

class PartNode
{
public:
    PartNode(Part*); 
    ~PartNode();
    void setNext(PartNode* node) { itsNext = node; }
    Part* GetPart() const;
    PartNode* GetNext() const;
private: 
    Part* itsPart;
    PartNode* itsNext;
};

现在我的问题是,我们无法真正操作

Part
实例,因为所有方法都是 const。因此,如果我们将所有
Part*
更改为仅
Part
有关系吗?或者数据本身应该是链表中的指针?

附言: 我不认为这是 Variable as point 的重复,因为它正在谈论

next
,当然,它必须是一个指针。

任何解释将不胜感激。

c++ pointers linked-list
1个回答
0
投票

现在我的问题是,我们无法真正操作 Part 实例,因为所有方法都是 const。

没有

Part
实例。
Part
纯粹是抽象的(即各种其他语言中的
Interface
)。

virtual void Display() const = 0;

您无法实例化

Interface

因此,如果我们将所有

Part*
更改为
Part
是否重要?

首先是的。你不能使用一个纯抽象

class
作为另一个
class
中的成员变量,因为当类被实例化时,这意味着纯抽象
class
也将被实例化。编译器不会允许这样做。

…我们无法真正操作

Part
实例,因为所有方法都是
const
。因此,如果我们将所有
Part*
更改为仅
Part
有关系吗?

无论是否是指针,只有

non-const
方法可以操作对象实例的成员,除非成员本身已声明
mutable
[1]


[1] 仅考虑“M&M 规则”的可变性。

© www.soinside.com 2019 - 2024. All rights reserved.