如何创建一个包含另一个类的对象数组的类,如何操作其他类的私有属性

Posted

技术标签:

【中文标题】如何创建一个包含另一个类的对象数组的类,如何操作其他类的私有属性【英文标题】:How to create a class that holds array of objects of another class , how to manipulate the other class private attributes 【发布时间】:2016-11-03 13:45:14 【问题描述】:
// this is the first point class header 
class Point : public CWaypoint
public:             //temporarily
    string m_description;
public:
    Point();
    virtual ~Point();
    void print();
    Point(string name, string description, double latitude,  double longitude);
    void getAllDataByReference( string& name,string& description, double& latitude,double& longitude);
;



// This is the database class header

class Database 

private:                    
    Point m_POI[10];      // Point is the other class
    int m_noPoi;
public:
    Database();
    virtual ~Database();
    void addPoI(string name,string description,double latitude,double longitude);
    Point * getPointerToPoi(string name);

【问题讨论】:

请在将来为您的代码附上一些文字。 具体遇到了什么问题? “如何操作其他类的私有属性”你可能需要公共方法来操作私有属性。 您不能操作其他类的私有数据。这就是private 的全部意义所在。如果您想从班级外部操纵成员,请不要将其设为私有。 (嗯,有friend,但这仅适用于特殊情况) 你为什么不用std::vector 【参考方案1】:

首先,要添加到数组中,您可以只依赖隐式声明的复制赋值运算符,它对所有字段进行浅拷贝:

void Database::addPoI(string name,string description,double latitude,double longitude) 
    if (m_noPoi >= 10) // handle error
    m_POI[m_noPoi++] = Point(name, description, latitude, longitude);

由于数据是私有的,您不能直接访问它(忽略“朋友”关系)。但是,您可以通过point::getAllDataByReference() 读取数据(通过其副本)。

【讨论】:

以上是关于如何创建一个包含另一个类的对象数组的类,如何操作其他类的私有属性的主要内容,如果未能解决你的问题,请参考以下文章

如何返回对象C ++的数组[重复]

如何初始化作为另一个类的成员变量的基类对象?

如何检查包含另一个对象数组的对象数组是不是具有属性

如何在 C++ 中运行具有仅调用线程的函数的类的多个对象?

在 C++ 中的类中创建类对象的动态数组

如何在C#中,在一个类里调用另外一个类的方法