如何让变量依赖于类中的其他变量? [英] How to let a variable be dependent on other variables inside a class?

查看:68
本文介绍了如何让变量依赖于类中的其他变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

变量 international_standard_book_number 有什么问题?每当 isbn_field_i 更改时,如何使它更改?

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;
}

输出:

0-0-0-a

所需的输出:

1-2-3-b

此问题针对某件事除了我的其他(为什么而不是如何),它的答案对我的帮助不及该主题的答案.

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.

推荐答案

变量 international_standard_book_number 有什么问题?每当 isbn_field_i 更改时,如何使它更改?

What is wrong with the variable international_standard_book_number? How can I make it that it changes, whenever isbn_field_i changes?

通常来说:每次组件更改时,您都必须重新分配它.

Generally speaking: you have to reassign it every time one component changes.

在您的特定情况下:使用初始化列表更改构造函数.

In your particular case: change the constructor using initialization list.

我的意思是...相反

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;};

首先,您的字段是默认初始化的,所以

first your fields are default initialized, so

isbn_field_1    = 0;
isbn_field_2    = 0;
isbn_field_3    = 0;
digit_or_letter = 'a';

international_standard_book_number="0"+"-"+"0"+"-"+"0"+"-"+'a';

然后执行构造函数的主体

then is executed the body of the constructor

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}
{}

初始化列表初始化字段(并替换为默认初始化)

the initialization list initialize the fields (and substitute the default initialization)

isbn_field_1    = 1;
isbn_field_2    = 2;
isbn_field_3    = 3;
digit_or_letter = 'b';

,然后执行 international_standard_book_number 的默认初始化,但是使用新值,所以

and then is executed the default initialization of international_standard_book_number but using the new values, so

international_standard_book_number="1"+"-"+"2"+"-"+"3"+"-"+'b';

这篇关于如何让变量依赖于类中的其他变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆