我想在将值传递给初始化列表之前做一个预处理活动。
(例如:做断言检查)
我的问题有一些背景:假设我有,
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. };
what if,第15行;就在之前,我调用初始化列表将b_obj (b_value)
-初始化为input_value
我想操纵(做检查或一些预处理)input_value的值??
我如何做到这一点?在Java中,会有类似于初始化块的东西。
我已经想到了-
创建a类和B类的外部函数,在创建a类的对象之前,用"input_value"初始化它,预处理该值。(然而,这违反了松耦合的概念)
使父类"a的父类"到类a,使类a扩展它,在该类中做预处理,因为父构造函数在初始化列表之前被调用?我没有尝试过,我不确定这是否是正确的方法。
我通过
使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. };
就我理解你的问题而言,我认为你必须尝试在a的构造函数中操纵输入,然后从该构造函数调用具有该输入的b的构造函数。
在函数中执行!
int b_validate(int);
A::A(int input_value)
: b_obj(b_validate(input_value))
{}
另外,我没有初始化a_value
,因为您应该删除它。