如何在构造函数中初始化一个常量字段?
想象一下,我有一个C ++类Foo和一个类Bar,必须使用构造函数创build一个Foo指针,并且该指针在Bar实例生命周期中保持不变。 什么是正确的做法呢?
事实上,我以为我可以写下面的代码,但它不编译..
class Foo; class Bar { public: Foo * const foo; Bar(Foo* foo) { this->foo = foo; } }; class Foo { public: int a; };
任何build议是值得欢迎的。
您需要在初始化程序列表中执行此操作:
Bar(Foo* _foo) : foo(_foo) { }
(请注意,我重命名传入的variables以避免混淆。)
我相信你必须在初始化程序中做到这一点。 例如:
Bar(Foo* foo) : foo(foo) { }
作为一个方面说明,如果你永远不会改变什么foo指向,通过它作为参考:
Foo& foo; Bar(Foo& foo) : foo(foo) { }
初始化const成员和其他特殊情况(如父类)可以在初始化程序列表中完成
class Foo { private: const int data; public: Foo(int x) : data(x) {} };
或者,类似地,对于父代初始化
class Foo { private: int data; public: Foo(int x) : data(x) {} }; class Bar : Foo { public: Bar(int x) : Foo(x) {} };
您需要在初始化程序列表中初始化foo。
class Bar { Foo* const foo; public: Bar(Foo* f) : foo(f) {...} };
使用参考:
Foo& foo; Bar(Foo& f) : foo(f) { }
您可以在Bar
轻松地引用foo
:
foo.doSomething();
尝试: Bar(Foo* xfoo) : foo(xfoo) {}