C++語言基礎(4)-構造函數和析構函數
阿新 • • 發佈:2017-06-20
編譯 編譯器 函數傳參 變量 括號 調用 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)-構造函數和析構函數