我想在将值传递给初始化列表之前进行预处理活动。
(例如:进行断言检查)
这里是我的问题的一些背景:假设我有,
1. class B {
2. private:
3. int b_value;
4. public:
5. B(int input_of_b) {
6. b_value = input_of_b;
7. }
8. };
和
9.
10. class A {
11. private:
12. int a_value;
13. B b_obj
14. public:
15. A(int input_value) : b_obj(input_value) {
16. //A constructor gets called after init list happens
17. }
18. };
如果,在第15行; 就在之前我调用初始化列表来初始化b_obj (b_value)
- 到input_value
我想操纵(检查或预处理)input_value ??
的值我如何实现这一目标? 在Java中 - 会有类似初始化块的东西。
我已经想到了 -
在A类和B类外部创建一个函数,在创建A的对象之前,用" input_value"初始化它,预处理该值。 (但是,这违反了松耦合概念)
制作父母班级" A'父母"对于类A,使类A扩展它,在该类中进行预处理,因为在初始化列表之前调用父构造函数?我没试过这个,我不确定这是不是正确的做法。
答案 0 :(得分:1)
我通过
解决了这个问题使B成为指针,预处理该值,然后使用new初始化B对象,然后在析构函数中释放内存
即
10. class A {
11. private:
12. int a_value;
13. B* b_obj
14. public:
15. A(int input_value) {
16. //preprocess input_value here
17. b_obj = new B(input_value);
18. }
19. ~A(){
20. delete b_obj;
21. }
22. };
答案 1 :(得分:0)
据我了解你的问题,我认为你必须尝试在一个构造函数中操作输入,然后从该构造函数调用b的构造函数和该输入。
答案 2 :(得分:0)
在函数中执行!
int b_validate(int);
A::A(int input_value)
: b_obj(b_validate(input_value))
{}
此外,我没有初始化a_value
,因为您应该将其删除。