【发布时间】:2021-11-08 01:25:17
【问题描述】:
我是 C++ 编程的新手。我正在使用 Visual Studio Code,我的代码:
#include <iostream>
using namespace std;
class Calculator;
class Complex
{
float a, b;
string Operation;
string name;
friend class Calculator;
public:
Complex(float, float, string, string);
Complex(float);
Complex();
Complex(Complex &, string);
void PrintComp(string op = "None")
{
if (op != "None" && name != "None")
{
cout << "\nBy " << op << " of z1 and z2:\n"
<< name << " = " << a << " + " << b << "i\n";
}
else if (name != "None")
{
cout << name << " = " << a << " + " << b << "i\n";
}
else
{
cout << a << " + " << b << "i\n";
}
}
};
Complex ::Complex(float x, float y, string givnname = "None", string operation = "None")
{
a = x;
b = y;
name = givnname;
PrintComp(operation);
}
Complex ::Complex(float x)
{
a = x;
b = 0;
}
Complex ::Complex()
{
a = 0;
b = 0;
}
Complex::Complex(Complex &obj, string givnname="None")
{
a = obj.a;
b = obj.b;
name = givnname;
cout << "Copy Cons called!"<< endl;
PrintComp();
}
class Calculator
{
public:
float SumRealComp(Complex const&, Complex const&);
float SumImgComp(Complex const&, Complex const&);
};
float Calculator ::SumRealComp(Complex const &obj1, Complex const & obj2)
{
return (obj1.a + obj2.a);
}
float Calculator ::SumImgComp(Complex const & obj1, Complex const & obj2)
{
return (obj1.b + obj2.b);
}
int main()
{
Complex z1(3, 5, "z1"), z2(4, 4, "z2");
Calculator calc;
Complex z3(calc.SumRealComp(z1, z2), calc.SumImgComp(z1, z2), "z3", "Sum");
Complex z4(z1, "z4");
return 0;
}
根据上面的代码,我最后使用的是复制构造函数,但是
复制构造函数在每个对象的形成时被调用。即使两者的参数不同。为什么会这样?
我正在向here 学习。
感谢我的代码中的每一个建议。
谢谢!
【问题讨论】:
-
Complex(Complex &, string);不是复制构造函数;Complex(Complex const &);是复制构造函数的预期签名,请参阅 Copy constructors -
@RichardCritten,
Complex(Complex&, string);的第二个参数有一个默认值,可以是一个复制构造函数。 -
@GhasemRamezani 但第一个参数是非常量引用 - 这也是不寻常的,因为它不能绑定到临时。作为一种教学/学习实践,这是糟糕的代码。
-
@RichardCritten,
X::X是一个复制构造函数,如果它的第一个参数是X&、X const&、X volatile&或X const volatile&类型。 eel.is/c++draft/class.copy.ctor -
@GhasemRamezani 同意 - 但
X const&以外的任何其他人都不应该真正参与介绍复制构造函数的练习,因为应该如何使用其他形式要先进得多。
标签: c++ copy-constructor