|
发表于 2020-7-1 11:27:00
|
显示全部楼层
本帖最后由 JLDawson 于 2020-7-1 11:32 编辑
1.无名对象,也叫临时对象。指的是直接由构造函数产生,但是没有被任何符号所引用的对象。例如:Complex(realpart+ri.realpart,imaginarypart+ri.imaginarypart);这句话产生的就是一个无名对象,这个对象产生以后,没有什么办法使用它。但是对于Complex a(4,5);来说,则产生的是一个有名字的对象,他的名字就是 a。
在这个基础上我们来看你的代码:
Complex(realpart + ri.realpart, imaginarypart + ri.imaginarypart);//声明了一个无名对象,无名对象在他的构造函数中调用了无名对象的成员函数setcomplexnumber对成员变量进行赋值。无名对象的成员变量分别被修改为4,7。
你的代码理解下来就是:c的add函数中你定义了一个无名对象,并对无名对象的成员变量进行赋值。之后你去打印c的成员变量。期间你对c的成员变量并没有进行修改。
- #include <iostream>
- #include <cmath>
- using namespace std;
- class Complex {
- public:
- Complex(double = 1.0, double = 1.0,string sName = "");
- void add(Complex const&);
- void print();
- void setcomplexnumber(double, double);
- private:
- double realpart, imaginarypart;
- string sName;
- };
- Complex::Complex(double re, double im, string sName)
- :sName(sName)
- {
- setcomplexnumber(re, im);
- cout << sName.c_str()<< ": " << realpart << imaginarypart << endl;
- }
- void Complex::add(const Complex& ri)
- {
- //setcomplexnumber(realpart + ri.realpart, imaginarypart + ri.imaginarypart); //为什么改成这行可以得到是4和7
- Complex(realpart + ri.realpart, imaginarypart + ri.imaginarypart,"noname"); //改成这行变成1和1了
- }
- void Complex::print()
- {
- cout << "(" << realpart << "," << imaginarypart << ")" << endl;
- }
- void Complex::setcomplexnumber(double r, double i)
- {
- realpart = r;
- imaginarypart = i;
- }
- int main()
- {
- Complex a(4, 5,"a");
- Complex b(3, 6,"b");
- Complex c(1,1,"c");
- a.print();
- cout << "+" << endl;
- b.print();
- cout << "=" << endl;
- c.add(b);
- c.print();
- return 0;
- }
复制代码
输出结果为:
- a: 45
- b: 36
- c: 11
- (4,5)
- +
- (3,6)
- =
- noname: 47
- (1,1)
复制代码
写代码多写几行,多点打印,这样才能更清晰。基础书多看看,最好边看边写代码,互相验证。
(你之前发了几个悬赏提问帖子,我看都有人回复的很明白了。你怎么没有结束提问,并把悬赏发给回答者?) |
|