一个棘手的OOP问题我从来没有理解过

sle*_*nja 10 c++ oop visual-c++

假设我有两个.cpp文件:oranges.cppbasket.cpp.他们分别有班级orange和班级basket.我的main程序产生许多baskets这反过来又产生许多oranges.所以基本上,main会有很多对象Baskets; 并且baskets将有许多对象Oranges.如果我有一个功能orange,需要知道我的篮子的颜色,我将如何找到篮子的颜色?

orangle.cpp

class oranges
{
    void whichColorBasket()
    {
        // get the color of the basket the orange is in...?
    }
}
Run Code Online (Sandbox Code Playgroud)

basket.cpp

class basket
{
    int color;

    void basket()
    {
        for(int i = 0; i < 10; i++)              
            oranges *o = new oranges;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我的语法可能不完美,但我如何basket从函数中获取数据库orange(orange是由创建的对象basket).

发送颜色参数不是一个选项,因为oranges 太多而且颜色basket可能会在运行时发生变化.

我在某处读到了静态函数可以解决的问题,但它们只有在相同的.cpp文件中才能工作.

那么,我该怎么办?

Oli*_*rth 17

静态函数几乎肯定不是这里的答案.

您可能需要将对"父"的引用传递BasketOranges对象,然后可以询问该对象以查找颜色.

例如:

class Basket
{
public:
    void Basket() {
        Oranges *o = new Oranges(*this);
    }

    color getColor() const { ... }
};


class Oranges
{
private:
    const Basket &myBasket;

public:
    Oranges(const Basket &b) : myBasket(b) {} // Store reference

    color getColor() const { return myBasket.getColor(); }  // Interrogate my basket

};
Run Code Online (Sandbox Code Playgroud)

无论您使用指针还是引用,都取决于它是否Oranges可以在Baskets 之间移动.