好久没看c++了

好久没看c++了,以为自己还能看明白,今天看了kyototycoon中的一个类,遇到了好几个知识点:

 
  1. // plug-in server driver
  2. class PlugInDriver : public kc::Thread {
  3.  public:
  4.   // constructor
  5.   explicit PlugInDriver(kt::PluggableServer* serv) : serv_(serv), error_(false) {}
  6.   // get the error flag
  7.   bool error() {
  8.     return error_;
  9.   }
  10.  private:
  11.   // perform service
  12.   void run(void) {
  13.     kc::Thread::sleep(0.4);
  14.     if (serv_->start()) {
  15.       if (!serv_->finish()) error_ = true;
  16.     } else {
  17.       error_ = true;
  18.     }
  19.   }
  20.   kt::PluggableServer* serv_;
  21.   bool error_;
  22. };

且只看:
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的,这显然不是我们想看到的; 那样则可以只用组合而不用继承了

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据