The following is the smallest program that replicates my problem:
#include & Lt; Iostream & gt; using namespace std; Classroom test {public: test () {_a = 0; } Test (int t) {test (); _b = t; } Zero performance () {cout & lt; & Lt; _a & lt; & Lt; '' & Lt; & Lt; _b & lt; & Lt; Endl; } Private: int _a; Int _b; }; Int main () {Test Test (10); Test.Display (); // 70 10 return 0; } When I do this, with the password _a starts, why does this happen? Is there any problem when the constructor is implemented from within another?
The problem here is in this code:
test (int t ) {Test (); _b = t; } This calls the no default test constructor, then set _b = t . Instead, it creates a temporary object of type test using the default constructor, ignores that temporary object, then sets _b = t as a result, default The constructor will not run for the receiver object, so the _a will remain unregistered. To fix this, in C ++ 11, you
test (int t): test () {_b = t; } which calls the default constructor, or (in C + 03 03) you can distinguish the initialization code from a default constructor into a supporting member function that you call by default Are and Parameter Manufacturers:
Test () {defaultInit (); } Test (int t) {defaultInit ()); _b = t; } Or, if you have the C ++ 11 compiler, then eliminate the default constructor using the default starters, like:
class test {Public: test () = default; Test (int t) {_b = t; } Zero performance () {cout & lt; & Lt; _a & lt; & Lt; '' & Lt; & Lt; _b & lt; & Lt; Endl; } Private: int _a = 0; Int _b; }; Hope it helps!
No comments:
Post a Comment