为什么这个对象不必调用它的构造函数?

时间:2021-01-23 14:31:39

标签: c++

我今天刚刚在 C++ 中学习了 OOP,但是当我尝试执行以下操作时遇到了一个奇怪的问题:

  1. Complex.h

#ifndef LEETCODE_COMPLEX_H
#define LEETCODE_COMPLEX_H

#include <iostream>

class Complex {
private:
    double _real;
    double _image;

public:
    Complex();

    Complex(double real, double image);

    Complex(const Complex &rhs);

    virtual ~Complex();

    Complex &operator=(const Complex &rhs);

    Complex operator+(const Complex &rhs) const;
};


#endif //LEETCODE_COMPLEX_H

  1. Complex.cpp

#include "Complex.h"
#include <iostream>

Complex::Complex(double real, double image) {
    _real = real;
    _image = image;
    std::cout << "Complex::Complex(double real, double image)" << std::endl;
}

Complex::Complex() : _real(0), _image(0) {
    std::cout << "Complex::Complex()" << std::endl;
}

Complex::~Complex() {
    std::cout << "~Complex" << std::endl;
}

Complex &Complex::operator=(const Complex &rhs) {
    if (this != &rhs) {
        _real = rhs._real;
        _image = rhs._image;
    }
    return *this;
}

Complex::Complex(const Complex &rhs) : _real(rhs._real), _image(rhs._image) {
    std::cout << "Complex::Complex(const Complex &rhs)" << std::endl;
}

Complex Complex::operator+(const Complex &rhs) const {
    return Complex(_real + rhs._real, _image + rhs._image);
}

  1. main.cpp
#include "Complex.h"

int main() {

    Complex a(1, 2);
    Complex b;
    Complex c = a + b;
    return 0;
}

问题: 我试图做的是创建 Complex aComplex b,并通过添加 Complex ca 来创建 b。这是我用来确定他们将使用什么构造函数的过程。正如我们所看到的,我在构造函数中放置了一些消息,它们可以帮助我检查使用了什么构造函数。令我惊讶的是输出是:

Complex::Complex(double real, double image)
Complex::Complex()
Complex::Complex(double real, double image)
~Complex
~Complex
~Complex

因为我写了Complex operator+(const Complex &rhs) const;,所以我认为最后一个Complex::Complex(double real, double image)是这个函数打印出来的。但我认为 c 也应该有一个构造函数,它应该打印另一条消息,我想知道的是。 我猜 c 可能只是一个指向 (a+b) 的指针,但我也相信 c 应该由复制构造函数创建。

0 个答案:

没有答案
相关问题