当前位置: 首页 > 面试题库 >

类方法和具有相同名称的变量,在C ++中而不在Java中编译错误?

沃瑾瑜
2023-03-14
问题内容
class Test {

      bool isVal() const {
          return isVal;
      }

  private:

      bool isVal;
};

在编译此文件时说

testClass.cpp:9:声明`bool Test :: isVal’

testClass.cpp:3:与先前的声明“ bool Test :: isVal()”冲突

虽然同样适用于Java

class Test {

  private boolean isVal;

  public boolean isVal() {
      return isVal;
  }

}

为什么在C ++中而不在Java中会发生编译错误?


问题答案:

因为C ++不是Java。您可以使用会员的地址:

&Test::isVal

因此,除了可以重载成员函数之外,不能让两个成员具有相同的名称。即使您可以通过某种方式消除歧义,下一个问题也将在其他地方出现。

在C ++中,包括我在内的许多人通常都专门称呼数据成员,例如m在其名称前加一个。这样可以避免该问题:

class Test {
public:
    bool IsVal() const { return mIsVal; }
private:
    bool mIsVal;
};


 类似资料:
  • 我在一次面试中被问到以下问题: 问题:名称和签名相同但返回类型不同的方法。他问我,可能吗?这种类型叫什么。 有人能告诉我以下情况吗: > 上面的事情在任何情况下都是可能的(至少像一个在基类中,一个在派生类中?)如果是,是什么类型?比如编译或运行时多态? 在编译时多态性中,如果方法的返回类型与签名也不同,该怎么办?但只有函数的名称是相同的。还是编译时多态性吗? 在重写中,如果我有不同的返回类型,但方

  • 问题内容: 在Java中,实例变量和方法可以具有相同的名称而没有任何不稳定或冲突吗? 我想确保是否可以摆脱它的编译问题,以免造成任何错误。 问题答案: 是的,这很好,主要是因为在语法上,它们的用法不同。

  • 我在类SpawnManager中声明了一个私有int tree_count。void Start()和void Update()按照预期使用了该变量,但另一个方法public void tree_destroy似乎使用了不同的tree_count。 这是我的代码。

  • 问题内容: 以下代码可以正常工作。在两个不同的结构上操作并打印该结构的字段的两种方法: 在控制台中显示所需的输出: 现在 ,如果我以以下方式更改方法签名,则会出现编译错误。我只是将方法的接收者移动到方法的参数: 我什至无法编译程序: 问 :为什么 当 方法具有相同的名称和Arity 时 ,我可以在接收器中互换结构类型,而不能在参数中互换结构类型? 问题答案: 因为Go不支持在其参数类型上重载用户定

  • 问题内容: 假设我有一个Helper类,如下所示: 并且是将被设置一次,在构造函数的变量。 不是,因此我可以使用来区分变量和参数。 另一方面,是。在涉及静态变量时,是否有任何方法可以将其与参数区分开? 问题答案: 尽管不建议通过构造函数设置静态变量的值,但可以使用。

  • 问题内容: 我的问题是为什么我不能再次调用该函数?或者,如何做到这一点? 假设我有这个功能: 我称之为: 我得到4。 但是,假设我声明了一个与该函数同名的变量(错误): 现在,如果我尝试这样做: 要么: 我将收到此错误:“ TypeError:’int’对象不可调用” 无法将变量“ a”分配给函数? 问题答案: 完成此操作后: 不再是一个 函数 ,而只是一个 整数 (您已将其重新分配!)。因此,很