变量 international_standard_book_number
有什么问题?我怎样才能让它改变,无论何时 isbn_field_i
变化?
#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;
}
输出:
0-0-0-a
期望的输出:
1-2-3-b
编辑:This question目标是其他(为什么,而不是如何)而不是我的,它的答案对我的帮助不如这个主题的答案。
最佳答案
What is wrong with the variable
international_standard_book_number
? How can I make it that it changes, wheneverisbn_field_i
changes?
一般而言:每当一个组件发生变化时,您都必须重新分配它。
在您的特定情况下:使用初始化列表更改构造函数。
我的意思是......相反
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;};
写
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}
{}
现在你的示例代码写
1-2-3-b
有什么变化?
和
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;};
首先你的字段是默认初始化的,所以
isbn_field_1 = 0;
isbn_field_2 = 0;
isbn_field_3 = 0;
digit_or_letter = 'a';
international_standard_book_number="0"+"-"+"0"+"-"+"0"+"-"+'a';
然后执行构造函数的主体
isbn_field_1 = 1;
isbn_field_2 = 2;
isbn_field_3 = 3;
digit_or_letter = 'b';
但是
international_standard_book_number
保持不变。和
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}
{}
初始化列表初始化字段(并替换默认初始化)
isbn_field_1 = 1;
isbn_field_2 = 2;
isbn_field_3 = 3;
digit_or_letter = 'b';
然后执行
international_standard_book_number
的默认初始化但使用新值,所以international_standard_book_number="1"+"-"+"2"+"-"+"3"+"-"+'b';
关于c++ - 如何让一个变量依赖于一个类中的其他变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60652051/