好久没看c++了,以为自己还能看明白,今天看了kyototycoon中的一个类,遇到了好几个知识点:
- // plug-in server driver
- class PlugInDriver : public kc::Thread {
- public:
- // constructor
- explicit PlugInDriver(kt::PluggableServer* serv) : serv_(serv), error_(false) {}
- // get the error flag
- bool error() {
- return error_;
- }
- private:
- // perform service
- void run(void) {
- kc::Thread::sleep(0.4);
- if (serv_->start()) {
- if (!serv_->finish()) error_ = true;
- } else {
- error_ = true;
- }
- }
- kt::PluggableServer* serv_;
- bool error_;
- };
且只看:
explicit PlugInDriver(kt::PluggableServer* serv) : serv_(serv), error_(false) {}
1. explicit 参看: http://wenku.baidu.com/view/3a02f28fcc22bcd126ff0ced.html
explicit 用来修饰构造函数的, 表明构造函数是显示的,而且,由explicit修饰的构造函数为默认构造函数;
因为使用了explicit,则可以:
PlugInDriver p(serv); // 而不能:
PlugInDriver p = serv; // 如果没有explicit ,则这样是可以的, 如:
string s = "abcd"; // 等价于
string s("abcd")
2. serv_(serv), error_(false)
这个是给两个私有成员赋值,至于为什么不卸载构造函数的函数体内,参看《c++编程思想》p329
3. 基类kt::Thread 使用了public来修饰
如果没有public来修饰的话,则子类的所有的public成员和方法在子类上都将体现为private的,这显然不是我们想看到的; 那样则可以只用组合而不用继承了