1. 程式人生 > >C++語言基礎(4)-構造函數和析構函數

C++語言基礎(4)-構造函數和析構函數

編譯 編譯器 函數傳參 變量 括號 調用 col space 概念

一.構造函數的定義

類似於java,C++中也有構造函數的概念,相關用法如下:

1.1 構造函數的定義

#include <iostream>
using namespace std;

class Student{
private:
    char *m_name;
    int m_age;
    float m_score;
public:
    //聲明構造函數
    Student(char *name, int age, float score);
    //聲明普通成員函數
    void show();
};

//定義構造函數
Student::Student(char *name, int age, float score){ m_name = name; m_age = age; m_score = score; } //定義普通成員函數 void Student::show(){ cout<<m_name<<"的年齡是"<<m_age<<",成績是"<<m_score<<endl; } int main(){ //創建對象時向構造函數傳參 Student stu("小明"
, 15, 92.5f); stu.show(); //創建對象時向構造函數傳參 Student *pstu = new Student("李華", 16, 96); pstu -> show(); return 0; }

運行結果:

小明的年齡是15,成績是92.5
李華的年齡是16,成績是96

1.2 構造函數的重載

構造函數同樣也支持重載操作:

#include <iostream>
using namespace std;

class Student{
private:
    char *m_name;
    
int m_age; float m_score; public: Student(); Student(char *name, int age, float score); void setname(char *name); void setage(int age); void setscore(float score); void show(); }; Student::Student(){ m_name = NULL; m_age = 0; m_score = 0.0; } Student::Student(char *name, int age, float score){ m_name = name; m_age = age; m_score = score; } void Student::setname(char *name){ m_name = name; } void Student::setage(int age){ m_age = age; } void Student::setscore(float score){ m_score = score; } void Student::show(){ if(m_name == NULL || m_age <= 0){ cout<<"成員變量還未初始化"<<endl; }else{ cout<<m_name<<"的年齡是"<<m_age<<",成績是"<<m_score<<endl; } } int main(){ //調用構造函數 Student(char *, int, float) Student stu("小明", 15, 92.5f); stu.show(); //調用構造函數 Student() Student *pstu = new Student(); pstu -> show(); pstu -> setname("李華"); pstu -> setage(16); pstu -> setscore(96); pstu -> show(); return 0; }

運行結果:

小明的年齡是15,成績是92.5
成員變量還未初始化
李華的年齡是16,成績是96

1.3 默認構造函數

類似於java,如果用戶自己沒有定義構造函數,那麽編譯器會自動生成一個默認的構造函數,只是這個構造函數的函數體是空的。

註意:調用沒有參數的構造函數也可以省略括號。

Student *stu = new Student;

Student *stu = new Student();

以上兩種寫法是等價的。

C++語言基礎(4)-構造函數和析構函數