在没有'extern'的情况下访问其他地方定义的变量值的最佳方法是什么?

时间:2014-02-16 21:06:52

标签: c++ variables const extern

我最近开始学习C ++,目前我正在阅读很多材料。 不断重复的一件事是使用extern来获得一些全局变量是一种不好的做法,我应该避免它。 问题是我在某些情况下看不到全局变量的替代方案,例如:当我在一个文件中有“产品目录”(包括名称,描述,价格等)时,需要在任何其他文件中显示目录中单个变量的值。

我发现有些人避免使用extern的一种方法是使用const来获取常量变量。

我的问题是,这不仅仅是交换extern另一个关键字(在这种情况下,至少)的工作方式几乎相同,这怎么突然不是一个坏的做法?

1 个答案:

答案 0 :(得分:1)

您可能希望将类似产品目录的数据封装在某种对象中。然后,您将查询该对象以从中获取一些数据。如果您需要另一个源文件中的对象,通常您会编写一个接受目录对象作为参数的函数或方法,并且调用者需要将该对象传递给该方法或函数。所以你可能在一个源文件中有这个:

class ProductCatalog
{
    public:
        ProductCatalog();
        virtual void ~ProductCatalog();

        int getNumItems();
        Product* getItemAtIndex(const int index);
        // ... whatever else your product catalog needs
 };

然后在其他一些源文件中,您将创建一个产品目录,然后将其传递给任何需要它的函数或方法,如下所示:

void DoSomeWork ()
{
    ProductCatalog catalog;
    AddProductsToCatalog (catalog); // <- Here you pass the catalog to someone else to work with

    int numProds = catalog.getNumItems();
    for (int i = 0; i < numProds; i++)
    {
        Product* nextItem = catalog.getItemAtIndex(i);
        // ... do something with product here ...
    }
}