【问题标题】:Is this a type of constructor?这是一种构造函数吗?
【发布时间】:2013-12-05 13:24:44
【问题描述】:

我正在翻阅我的一本 c++ 书籍,我发现了这个代码示例

class CDistance
{
private:
    int feet, inches;
public:
    CDistance();
    CDistance(int, int);
    ~CDistance();
    void setDist();
    void printDist() const;
    CDistance add(const CDistance&) const;
};

我了解构造函数和重载之类的东西,但是底部的类类型原型呢?奇怪的是,这本书没有提供任何关于它的信息,只有图表。但我只是想知道,函数类型属于类是什么意思。我很确定我理解该参数,因为它似乎是对该类类型对象的常量引用。但是为什么/如何声明这样的函数,这是否意味着它返回类?大声笑,我是编程新手,如果有人能帮助我理解这一点,我将不胜感激。

【问题讨论】:

  • 它只是一个简单的函数,它接受一个对 CDistance 的 const 引用并返回一个 CDistance。
  • 构造函数与类/结构命名相同,并且没有任何返回值。
  • @JoachimPileborg:我认为“返回类型”是更合适的术语。返回是来自函数调用表达式的东西,构造函数不是函数。
  • @KerrekSB 真的吗?它们在第 12 节“特殊成员函数”中进行了描述,例如“默认构造函数 (12.1)、复制构造函数和复制赋值运算符 (12.8)、移动构造函数和移动赋值运算符 (12.8) 和析构函数 (12.4) 是 特殊成员函数。”并且在整个过程中还多次提到“功能”这个词。
  • @BoBTFish:当然可以,但是你不能用构造函数形成函数调用表达式,也不能形成函数指针。所以你必须小心你所说的“功能”。

标签: c++ function class constructor


【解决方案1】:

只有当函数具有类的名称时,才能将其称为构造函数。 CDistance 类型的函数表示该函数返回该类的一个对象。所以它不是构造函数

【讨论】:

    【解决方案2】:

    构造函数在某些方面不同于普通的成员函数:

    • 它们没有返回类型
    • 他们的名字和类名一样
    • 它们不能是 const 限定的

    这使得函数 CDistance::add 不是构造函数,因为它在所有 3 个上都失败了。

    【讨论】:

    • * 它们不以波浪号 (~) 为前缀
    • 从技术上讲,构造函数根本没有名字。然而,在这种情况下,这只是迂腐。
    • @fxam 不是。构造函数被简单地定义为function-specifier(其中一些是不允许的)的可选序列,后跟类名,后跟参数列表。这几乎与指定析构函数的方式相同,但您无需提及波浪号即可说明构造函数是什么。但这也是技术迂腐;)
    【解决方案3】:

    您的意思是:CDistance add(const CDistance&) const;

    这是细节:

    1. 参数中const的目的是确保原始对象不能通过其引用被更改... const after 参数是为了确保该方法不能更改其主体中的任何内容..

    2. 该函数返回CDistance的对象,因此在执行后您可以使用新对象来获取它,例如:

    CDistance tempObj = theObj.add (param_obj);

    希望对您有所帮助... :D

    【讨论】:

      【解决方案4】:

      很有用:

      CDistance D1 = CDistance();

      CDistance D2 = CDistance();

      CDistance D3 = CDistance();

      D3.add(D2.add(D1));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-01
        • 2017-03-17
        • 1970-01-01
        • 2022-01-09
        • 1970-01-01
        • 2021-04-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多