struct構造函數-從多個方面詳細闡述

一、定義與使用

struct構造函數是在C++中定義和使用結構體時的一個重要概念,主要用於給結構體的成員變量進行初始化。

struct Person{
    string name;
    int age;
    Person(string n, int a):name(n),age(a){}
};
Person p("Jack", 25);

如上例所示,我們在定義Person結構體時,傳入了兩個參數n和a,並將其賦值給了name和age成員變量。然後,我們在實例化Person對象時,直接將參數傳入構造函數,使得對象初始化時就擁有了name和age屬性。

二、構造函數的重載

在C++中,我們可以定義多個構造函數,以用於不同的初始化過程或情況。這種方法叫做構造函數的重載。

struct Student{
    string name;
    int age;
    int id;
    Student(string n, int a, int i):name(n),age(a),id(i){}
    Student(string n):name(n){}
};
Student s1("Tom", 18, 2021010001);
Student s2("Jerry");

如上例所示,我們使用了兩個不同的構造函數來初始化Student對象。在第一個構造函數中,我們傳入了三個參數n、a和i,並將其賦值給了name、age和id成員變量;在第二個構造函數中,我們僅傳入了一個參數n,並將其賦值給了name成員變量。這樣,使得實例化對象的過程更加靈活方便。

三、默認構造函數

默認構造函數是指沒有參數或者所有參數都有默認值的構造函數。如果我們沒有定義任何構造函數,C++編譯器會自動生成一個默認構造函數,以用於對象的實例化。

struct Book{
    string name;
    int price;
    Book(){}
};
Book b;

如上例所示,我們定義了一個Book結構體,並沒有傳遞任何參數給默認構造函數,然後通過實例化對象b來使用它。此時,對象的成員變量都被初始化為默認值。

四、拷貝構造函數

拷貝構造函數是用於創建新對象時,將已有對象的值傳遞給新對象的構造函數。它是採用一個常量引用參數的構造函數來實現的。

struct Car{
    string brand;
    int price;
    Car(){}
    Car(const Car &c){
        brand = c.brand;
        price = c.price;
    }
};
Car c1;
c1.brand = "BMW";
c1.price = 500000;
Car c2(c1);

如上例所示,我們定義了一個Car結構體,並且重載了拷貝構造函數。在實例化c2時,我們將c1作為參數傳遞給它的拷貝構造函數,從而實現了將c1對象的值拷貝到c2中。

五、析構函數

析構函數是在對象被銷毀時自動調用的函數,它負責清理對象被分配的內存空間和資源。

struct Dog{
    string name;
    Dog(){}
    ~Dog(){
        cout << "Dog is destroyed." << endl;
    }
};
Dog *d = new Dog();
delete d;

如上例所示,我們定義了一個Dog結構體,並在其中重載了析構函數。在實例化d對象時,我們使用了new運算符來為它分配內存空間,在對象被銷毀時,C++編譯器會自動調用析構函數來清理內存空間。此時,我們在析構函數中打印了一條消息來驗證析構函數的調用情況。

六、總體代碼

#include 
#include 

using namespace std;

struct Person{
    string name;
    int age;
    Person(string n, int a):name(n),age(a){}
};

struct Student{
    string name;
    int age;
    int id;
    Student(string n, int a, int i):name(n),age(a),id(i){}
    Student(string n):name(n){}
};

struct Book{
    string name;
    int price;
    Book(){}
};

struct Car{
    string brand;
    int price;
    Car(){}
    Car(const Car &c){
        brand = c.brand;
        price = c.price;
    }
};

struct Dog{
    string name;
    Dog(){}
    ~Dog(){
        cout << "Dog is destroyed." << endl;
    }
};

int main(){
    Person p("Jack", 25);
    Student s1("Tom", 18, 2021010001);
    Student s2("Jerry");
    Book b;
    Car c1;
    c1.brand = "BMW";
    c1.price = 500000;
    Car c2(c1);
    Dog *d = new Dog();
    delete d;
    return 0;
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/296076.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-27 12:57
下一篇 2024-12-27 12:57

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 為什麼Python不能編譯?——從多個方面淺析原因和解決方法

    Python作為很多開發人員、數據科學家和計算機學習者的首選編程語言之一,受到了廣泛關注和應用。但與之伴隨的問題之一是Python不能編譯,這給基於編譯的開發和部署方式帶來不少麻煩…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • Python合併多個相同表頭文件

    對於需要合併多個相同表頭文件的情況,我們可以使用Python來實現快速的合併。 一、讀取CSV文件 使用Python中的csv庫讀取CSV文件。 import csv with o…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29

發表回復

登錄後才能評論