What is wrong with the variable international_standard_book_number
? How can I make it that it changes, whenever isbn_field_i
changes?
#include <iostream>
#include <string>
class ISBN
{
private:
unsigned int isbn_field_1 = 0;
unsigned int isbn_field_2 = 0;
unsigned int isbn_field_3 = 0;
char digit_or_letter = 'a';
std::string international_standard_book_number =
std::to_string(isbn_field_1) + "-" + std::to_string(isbn_field_2) + "-" +
std::to_string(isbn_field_3) + "-" + digit_or_letter;
public:
ISBN()
{
isbn_field_1 = 0, isbn_field_2 = 0, isbn_field_3 = 0, digit_or_letter = 'a';
}
ISBN(unsigned int a, unsigned int b, unsigned int c, char d)
{
isbn_field_1 = a, isbn_field_2 = b, isbn_field_3 = c, digit_or_letter = d;
}
friend std::ostream& operator<<(std::ostream& os, ISBN const& i)
{
return os << i.international_standard_book_number;
}
};
int
main()
{
ISBN test(1, 2, 3, 'b');
std::cout << test << "\n";
return 0;
}
Output:
0-0-0-a
Desired output:
1-2-3-b
Edit: This question aims at something else(why, instead of how) than mine, and its answers don't help me as much as the answers from this topic.
Generally speaking: you have to reassign it every time one component changes.
In your particular case: change the constructor using initialization list.
I mean... instead
write
Now your example code write
What changes ?
With
first your fields are default initialized, so
then is executed the body of the constructor
but
international_standard_book_number
remain unchanged.With
the initialization list initialize the fields (and substitute the default initialization)
and then is executed the default initialization of
international_standard_book_number
but using the new values, so