在c++中,可以将类成员作为传入的引用吗?

In C++, can you have a class member be a passed-in reference?

本文关键字:引用 成员 c++      更新时间:2023-10-16

我有一个'StripManager'类,负责更新已经存在的'Strip'类的数据。因此,经理需要一个条带的参考。现在我知道我可以传递一个指针到'Strip'类到'StripManager'类的构造函数,但我想知道是否有任何方法使用引用而不是指针。我只是一直更喜欢处理引用,因为你像使用实际的类实例一样使用它们,而不是必须处理指针表示法等。

那么这是可以做到的吗?

下面是一些伪代码…

class StripManager
{
  public: 
    Strip &managedStrip;
    StripManager(Strip &stripToManage);
}
StripManager::StripManager(Strip &stripToManage)
{
    managedStrip = stripToManage;
}

引用只能初始化,不能赋值。所以你不能重新赋值引用本身。可以在成员初始化列表中初始化引用成员。

class StripManager
{
  public: 
    Strip &managedStrip;
    StripManager(Strip &stripToManage);
};
StripManager::StripManager(Strip &stripToManage): managedStrip(stripToManage)
{}

可以初始化引用,但不能对其赋值,因此需要为此使用成员初始化列表。在构造函数中使用它而不是赋值是一个好习惯,因为它可以更有效。

StripManager::StripManager(Strip &stripToManage) : managedStrip (stripToManage)
{
}

注意,有一个引用成员使得StripManager不可赋值(StripManager a(strip1), b(strip2); a = b;不会编译,除非你写一个自定义的赋值操作符;即使这样,由于您不能分配引用,因此语义应该是什么是不清楚的),这可能是一个问题,也可能不是,这取决于您的特定情况。