C++使用初始化列表的方式来初始化字段

简介: C++使用初始化列表的方式来初始化字段

先来看一个案例:

#include <iostream>
using namespace std ;
//定义一个类
class ScreenRecoveryUI 
{
  private :
    int r , g , b ; 
    char buffer[10] ;
    char *p ;
  public :
    ScreenRecoveryUI();
    void setvalue(int a , int b , int c);
    void print();
};
//使用初始化列表的方式初始化构造函数里的私有环境变量 
ScreenRecoveryUI::ScreenRecoveryUI():
  r(0),
  g(0),
  b(0),
  p(nullptr){
  for(int i = 0 ; i < 10 ; i++){
    buffer[i] = 0 ;
  }
} 
void ScreenRecoveryUI::setvalue(int a ,int b , int c)
{
  this->r = a ; 
  this->g = b ; 
  this->b = c ;
}
void ScreenRecoveryUI::print()
{
  cout << "r:" << this->r << endl << "g:" << this->g << endl << "b:" << b << endl ;  
}
int main(void)
{
  ScreenRecoveryUI screen ; 
  screen.setvalue(255,255,0);
  screen.print();
  return 0 ;
}

运行结果:

r:255
g:255
b:0

   明白了上述用法以后,Android Recovery源代码里面也有类似的案例。下面这个是Recovery的一个构造函数,代码位于:screen_ui.cpp,它的类的实现在screen_ui.h。如下这个ScreenRecoveryUI类,这个类是继承于RecoveryUI类的,这个文件在screen_ui.h

class ScreenRecoveryUI : public RecoveryUI {
  public:
    ScreenRecoveryUI();
    void Init();
    void SetLocale(const char* locale);
    // overall recovery state ("background image")
    void SetBackground(Icon icon);
    // progress indicator
    void SetProgressType(ProgressType type);
    void ShowProgress(float portion, float seconds);
    void SetProgress(float fraction);
    void SetStage(int current, int max);
    // text log
    void ShowText(bool visible);
    bool IsTextVisible();
    bool WasTextEverVisible();
    // printing messages
    void Print(const char* fmt, ...) __printflike(2, 3);
    void ShowFile(const char* filename);
    // menu display
    void StartMenu(const char* const * headers, const char* const * items,
                   int initial_selection);
    int SelectMenu(int sel);
    void EndMenu();
    void KeyLongPress(int);
    void Redraw();
    enum UIElement {
        HEADER, MENU, MENU_SEL_BG, MENU_SEL_BG_ACTIVE, MENU_SEL_FG, LOG, TEXT_FILL, INFO
    };
    void SetColor(UIElement e);
  private:
    Icon currentIcon;
    int installingFrame;
    const char* locale;
    bool rtl_locale;
    pthread_mutex_t updateMutex;
    GRSurface* backgroundIcon[5];
    GRSurface* backgroundText[5];
    GRSurface** installation;
    GRSurface* progressBarEmpty;
    GRSurface* progressBarFill;
    GRSurface* stageMarkerEmpty;
    GRSurface* stageMarkerFill;
    ProgressType progressBarType;
    float progressScopeStart, progressScopeSize, progress;
    double progressScopeTime, progressScopeDuration;
    // true when both graphics pages are the same (except for the progress bar).
    bool pagesIdentical;
    size_t text_cols_, text_rows_;
    // Log text overlay, displayed when a magic key is pressed.
    char** text_;
    size_t text_col_, text_row_, text_top_;
    bool show_text;
    bool show_text_ever;   // has show_text ever been true?
    char** menu_;
    const char* const* menu_headers_;
    bool show_menu;
    int menu_items, menu_sel;
    // An alternate text screen, swapped with 'text_' when we're viewing a log file.
    char** file_viewer_text_;
    pthread_t progress_thread_;
    int animation_fps;
    int installing_frames;
    int iconX, iconY;
    int stage, max_stage;
    void draw_background_locked(Icon icon);
    void draw_progress_locked();
    void draw_screen_locked();
    void update_screen_locked();
    void update_progress_locked();
    static void* ProgressThreadStartRoutine(void* data);
    void ProgressThreadLoop();
    void ShowFile(FILE*);
    void PutChar(char);
    void ClearText();
    void DrawHorizontalRule(int* y);
    void DrawTextLine(int* y, const char* line, bool bold);
    void DrawTextLines(int* y, const char* const* lines);
    void LoadBitmap(const char* filename, GRSurface** surface);
    void LoadBitmapArray(const char* filename, int* frames, GRSurface*** surface);
    void LoadLocalizedBitmap(const char* filename, GRSurface** surface);
};

   下面是这个类的构造函数的实现,其中构造函数就采用了初始化列表的方式来初始化字段,以下构造函数的实现在screen_ui.cpp文件中可以找到。

ScreenRecoveryUI::ScreenRecoveryUI() :
    currentIcon(NONE),
    installingFrame(0),
    locale(nullptr),
    rtl_locale(false),
    progressBarType(EMPTY),
    progressScopeStart(0),
    progressScopeSize(0),
    progress(0),
    pagesIdentical(false),
    text_cols_(0),
    text_rows_(0),
    text_(nullptr),
    text_col_(0),
    text_row_(0),
    text_top_(0),
    show_text(false),
    show_text_ever(false),
    menu_(nullptr),
    show_menu(false),
    menu_items(0),
    menu_sel(0),
    file_viewer_text_(nullptr),
    animation_fps(20),
    installing_frames(-1),
    stage(-1),
    max_stage(-1) {
    for (int i = 0; i < 5; i++) {
        backgroundIcon[i] = nullptr;
    }
    pthread_mutex_init(&updateMutex, nullptr);
}


目录
相关文章
|
1月前
|
存储 编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(一)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
1月前
|
存储 编译器 数据安全/隐私保护
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
29 3
|
1月前
|
编译器 C++
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
45 3
|
1月前
|
C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(二)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
1月前
|
编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(三)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
1月前
|
C++
C++构造函数初始化类对象
C++构造函数初始化类对象
18 0
|
7天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
34 4
|
8天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
30 4
|
1月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
27 4
|
1月前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
23 4