我最近开始学习C ++,目前我正在阅读很多材料。
不断重复的一件事是使用extern
来获得一些全局变量是一种不好的做法,我应该避免它。
问题是我在某些情况下看不到全局变量的替代方案,例如:当我在一个文件中有“产品目录”(包括名称,描述,价格等)时,需要在任何其他文件中显示目录中单个变量的值。
我发现有些人避免使用extern
的一种方法是使用const
来获取常量变量。
我的问题是,这不仅仅是交换extern
另一个关键字(在这种情况下,至少)的工作方式几乎相同,这怎么突然不是一个坏的做法?
答案 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 ...
}
}