1.5 結構體和類

1.5 結構體和類


返回目錄 1 面向對象技術
上一節 1.4 cpp編程基礎
下一節 1.6 cpp的常見特性ios


結構體

源代碼

/* struct.cpp 結構體實例 */
#include <iostream>
#include <string>

struct Student
{
    std::string name; // 姓名
    std::string sex; // 性別
    int age; // 年齡
}typedef Student;

void STUDENT_dispalyInfos(Student student)
{
    /* 這個函數用來顯示學生信息 */
    std::cout << "學生信息" << std::endl;
    std::cout << "姓名:" << student.name << std::endl;
    std::cout << "性別:" << student.sex << std::endl;
    std::cout << "年齡:" << student.age << std::endl;
}

int main()
{

    Student XiaoMing;

    XiaoMing.name = "小明";
    XiaoMing.sex = "男";
    XiaoMing.age = 18;

    STUDENT_dispalyInfos(XiaoMing);

    return 0;

}

編譯運行

學生信息
姓名:小明
性別:男
年齡:18

源代碼

/* class.cpp 類實例 */
#include <iostream>
#include <string>

class Student
{
private:
    std::string name; // 姓名
    std::string sex; // 性別
    int age; // 年齡
public:
    Student(); // 這是構造函數
    Student(std::string name, std::string sex, int age); // 構造函數重載
    ~Student(); // 析構函數
    void Init(std::string name, std::string sex, int age); // 初始化函數
    void displayInfos(); // 顯示成員信息的函數
};

Student::Student()
{
    std::cout << "-++類實例化時,會先調用構造函數" << std::endl;

    this->name = "";
    this->sex = "";
    this->age = 0;

    std::cout << "+++" << name << "初始化完成" << std::endl;
}

Student::Student(std::string name, std::string sex, int age)
{
    std::cout << "-++類實例化時,會先調用構造函數" << std::endl;

    this->name = "";
    this->sex = "";
    this->age = 0;

    std::cout << "+++" << name << "初始化完成" << std::endl;

    Init(name, sex, age);
}

Student::~Student()
{
    std::cout << "-++對象銷燬時,會調用析構函數" << std::endl;
    std::cout << "+++" << this->name << "已銷燬" << std::endl;
}

void Student::displayInfos()
{
    std::cout << "————學生信息————" << std::endl;
    std::cout << "——姓名:" << this->name << std::endl;
    std::cout << "——性別:" << this->sex << std::endl;
    std::cout << "——年齡:" << this->age << std::endl;
    std::cout << "————————————" << std::endl;
}

void Student::Init(std::string name, std::string sex, int age)
{
    std::cout << "--+" << name << "完成初始化" << std::endl;
    this->name = name;
    this->sex = sex;
    this->age = age;
}

int main()
{

    Student XiaoMing; // 類實例化時調用無參的構造函數
    XiaoMing.Init("小明", "男", 20); // 手動調用初始化函數

    Student XiaoHong("小紅", "女", 20); // 類實例化時調用有參的構造函數,直接初始化完成

    XiaoMing.displayInfos(); // 顯示信息
    XiaoHong.displayInfos();

    return 0;

}

編譯運行

-++類實例化時,會先調用構造函數
+++初始化完成
--+小明完成初始化
-++類實例化時,會先調用構造函數
+++小紅初始化完成
--+小紅完成初始化
————學生信息————
——姓名:小明
——性別:男
——年齡:20
————————————
————學生信息————
——姓名:小紅
——性別:女
——年齡:20
————————————
-++對象銷燬時,會調用析構函數
+++小紅已銷燬
-++對象銷燬時,會調用析構函數
+++小明已銷燬

能夠看到,結構體與類有很大的類似之處,可是類內部容許有函數,而且有默認的構造函數(在類實例化時自動運行,能夠重載)和默認的析構函數(對象生命週期結束時自動運行,回收資源)。c++

最早構造的對象,最後被析構。編程

類能夠當作是一個獨立的小程序,做爲整個項目的基本機器存在着,咱們通常會盡可能少在main函數寫大量的代碼,而是集中到類或者函數中,直接在main函數中調用它們便可。小程序

this直接指向實例化的對象對應的類中成員,在這個例子中用於和傳入的外界參數與對象的數據成員區分開來。segmentfault


返回目錄 1 面向對象技術
上一節 1.4 cpp編程基礎
下一節 1.6 cpp的常見特性函數


參考資料:this

  • 《C++程序設計》傳智播客
  • 百度百科
相關文章
相關標籤/搜索