Ich bereite mich morgen auf einen Test vor. Ich habe Probleme mit der untenstehenden C++ - Komplettlösung. Ich habe den Code ausgeführt und cout verwendet, um die Ausführung des Programms zu überprüfen. Die erste Sache, die ich bemerkte, dass das Programm den Standardkonstruktor in der Klasse "ein" für 3mal nur für das erste Objekt in Haupt aufruft. Ich bin wirklich verwirrt mit der Ausführung des Codes.Wie kann man wissen, welche Klasse bei 2 Klassen in C++ verwendet wird?
#include <iostream>
using namespace std;
class one {
int n;
int m;
public:
one() { n = 5; m = 6; cout << "one one made\n"; }
one(int a, int b) {
n = a;
m = b;
cout << "made one one\n";
}
friend ostream &operator<<(ostream &, one);
};
ostream &operator<<(ostream &os, one a) {
return os << a.n << '/' << a.m << '=' <<
(a.n/a.m) << '\n';
}
class two {
one x;
one y;
public:
two() { cout << "one two made\n"; }
two(int a, int b, int c, int d) {
x = one(a, b);
y = one(c, d);
cout << "made one two\n";
}
friend ostream &operator<<(ostream &, two);
};
ostream &operator<<(ostream &os, two a) {
return os << a.x << a.y;
}
int main() {
two t1, t2(4, 2, 8, 3);
cout << t1 << t2;
one t3(5, 10), t4;
cout << t3 << t4;
return 0;
}
Ich verstehe nicht die erste Sache. Wenn der main den ersten Standardkonstruktor two t1,
aufruft, warum wird er dreimal hintereinander aufgerufen, dann ruft er t2(4, 2, 8, 3);
auf?
Es tut mir leid, wenn der Code zu lang ist, aber ich brauche wirklich Hilfe, um es zu verstehen.
Bitte beraten. Vielen Dank.
Bitte erarbeiten Sie Ihre Frage, was Sie von diesem Code verstehen kann nicht? – SMK
Es gibt eine spezifische Optimierung, die von C++ erlaubt ist, wo der Compiler in bestimmten Fällen Provisorien entfernen kann. Das macht es schwerer vorherzusagen, wie viele Konstruktoren aufgerufen werden. Es ist durchaus üblich, dass Compiler während des Debuggens zusätzliche ctor-Aufrufe hinterlassen, diese jedoch für die endgültige Version entfernen. – MSalters