读代码学到的一些C++基础知识

  • 类的构造函数
    初始化类对象的成员数据,只要类的对象被创建,就会执行构造函数
    .h文件声明类:
class TestBase {
public:
    TestBase(const char * name, const char * file_path, const int max_image_num = -1); //构造函数
    ~TestBase(void);
    bool evaluate(void);
protected:
    const char * name_;
    const char * file_path_;
    const int max_image_num_;
    bool is_list_;
    cv::Mat image_;
    unsigned int image_width_;
    unsigned int image_height_;
    unsigned int image_channels_;
    std::size_t image_size_;
    bool success_;
    bool evaluated_;
    ...........
}

.cpp文件中对构造函数的定义:

TestBase::TestBase(const char * name, const char * file_path, const int max_image_num):
  name_(name),
  file_path_(file_path),
  max_image_num_(max_image_num),
  success_(true),
  evaluated_(false) //冒号后面这部分叫做构造函数初始值列表,括号内是赋的初值,外面是赋值的数据成员
  {
  is_list_ = is_list_file(file_path);  //花括号内是构造函数的函数体,可以为空
  }
  • 结构体的构造函数

C++的结构体和类差不多,也可以有成员函数,结构体有的功能类都有。
但,C++结构体内部成员变量及成员函数默认的访问级别是public,而c++类的内部成员变量及成员函数的默认访问级别是private。
C++结构体的继承默认是public,而c++类的继承默认是private。
.h文件声明结构体:

struct TestCase {
    //三个成员数据
    std::unique_ptr<TestBase> test_;
    std::size_t rep_cnt_;
    std::function<bool(const std::unique_ptr<TestBase> &)> fn_; 
    //结构体的构造函数
    TestCase(TestBase * test_ptr): //只对test_初始化,其余为默认值
        test_(test_ptr), rep_cnt_(1), fn_(nullptr) {}
    TestCase(TestBase * test_ptr, std::size_t rep_cnt): //对test_和rep_cnt_初始化
        test_(test_ptr), rep_cnt_(rep_cnt), fn_(nullptr) {}
    TestCase(TestBase * test_ptr, std::size_t rep_cnt, std::function<bool(const std::unique_ptr<TestBase> &)> fn): //都初始化
        test_(test_ptr), rep_cnt_(rep_cnt), fn_(fn) {}
};

你可能感兴趣的:(c++)