C++:建構函式的分類和呼叫

今天no1發表於2020-12-13

建構函式的分類和呼叫

//每日心得:獨上高樓,望盡天涯路
//日期:12.13
//學習內容:建構函式的分類和呼叫
//重點:

//兩種分類方式:
//按引數分為:有參構造 和 無參構造
//按型別分為:普通構造 和 複製構造

//三種呼叫方式:
//括號法 顯示法 隱式轉化法

#include <iostream>
using namespace std;
 //建構函式的分類及呼叫
//分類
//按引數分為:有參構造 和 無參構造
class Person
{
public:
    //建構函式(不寫返回值)
    Person()
    {
        cout << "Person 的無參建構函式(預設建構函式)呼叫" << endl;
    }
    Person(int a)
    {
        cout << "Person 的有參建構函式呼叫" << endl;
        age = a;
    }
    //複製建構函式
    Person(const Person& p)// const -> 函式內不改變傳入的本體 ;& -> 傳入實參本體
    {
        //將傳入的人身上的 部分屬性 ,賦值到返回值身上
        age = p.age;
        cout << "Person 的有參建構函式呼叫" << endl;
    }
    ~Person()
    {
        cout << "Person 的解構函式呼叫" << endl;
    }
private:
    int age = 0;
};
void test1()
{
    //1、括號法
    cout << "p  的";
    Person p;  //預設建構函式呼叫
    cout << "p1 的";
    Person p1(20); //有參建構函式呼叫
    cout << "p2 的";
    Person p2(p1);// 複製建構函式呼叫

    //注意事項:
    //呼叫預設建構函式時,不要加() 如:Person p();   -> 會使編譯器認為這是一個函式宣告

}
void test2()
{
    //2、顯示法
    cout << "p3 的";
    Person p3 = Person(10); //有參構造
    cout << "p4 的";
    Person p4 = Person(p3); //複製構造

    //Person(10); //匿名物件 vs 2019 報錯 建立後立刻銷燬
    //cout << "前面是一條銷燬資訊" << endl;

    //不要利用複製建構函式 初始化 匿名物件 編譯器會認為是 Person (p3) -> Person p3 物件宣告
    //Person(p3); //重定義
}
void test3()
{
    //3、隱式轉化法
    Person p5 = 10; // 相當於 寫了 Person p5 = Person (10);
    Person p6 = p5; // 相當於 寫了 Person p6 (p5);

}
//呼叫
int main()
{
    //最好用括號法
    test1();
    test2();
    test3();
    return 0;
}


相關文章