1. 程式人生 > >C++ 建構函式、預設建構函式、解構函式和物件初始化

C++ 建構函式、預設建構函式、解構函式和物件初始化

#include <iostream>
using namespace std;


class Student{
    private:
        int m_age;
        int m_grade;
        string m_sex;
    
    public:
        Student(int age,int grade,string sex);  //建構函式
        Student();  //建構函式
        void show();
            
};


Student::Student(int age,int grade,string sex){       //定義建構函式,用於初始化資料成員,m_age,m_grade,m_sex; 
        m_age=age;
        m_grade=grade;
        m_sex=sex;  
}


Student::Student(){       //定義預設建構函式,該處使用函式過載,過載建構函式Student::Student()
        m_age=4;
        m_grade=4;
        m_sex="Female";  
}
void Student::show(){
        cout<<m_age<<endl;
    }

Student::~Student(){       //定義解構函式
        cout <<"Object is over"<<endl; 
}
//程式主函式
int main(){
    Student stu1(1,2,"Female"); //隱式呼叫建構函式,等價於Student stu1=Student(1,2,"Female");
    stu1.show();
    
    Student stu2 = Student(2,3,"Male"); //顯示呼叫建構函式,等價於Student stu2(2,3,"Male");
    stu2.show();
    
    Student stu3;//未初始化物件值,呼叫的是預設建構函式
    stu3.show(); 
}

上述程式碼分別採用了顯示和隱式呼叫建構函式進行物件初始化。

隱式呼叫建構函式,進行物件stu1初始化:

Student stu1(1,2,”Female”);

顯示呼叫建構函式,進行物件stu2初始化:

Student stu2 = Student(2,3,”Male”);

未初始化物件stu3,呼叫預設建構函式,:
Student stu3;

程式程式碼定義了解構函式~Student();在物件銷燬時執行;

提示:1、為類定義了建構函式後,如要使用預設建構函式(如建立未初始化的物件時),則必須顯示建立預設建構函式;

      2、為建立未初始化的物件時,通常在設計類時,最好提供預設建構函式。

相關推薦

C++ 建構函式預設建構函式函式物件初始

#include <iostream> using namespace std; class Student{     private:         int m_age;         int m_grade;         string m_sex

[收集]c++抽象類純虛擬函式以及巧用純虛函式實現介面類

在Java、C#中有關鍵詞abstract指明抽象函式、抽象類,但是在C++中沒有這個關鍵詞,很顯然,在C++也會需要只需要在基類宣告某函式的情況,而不需要寫具體的實現,那C++中是如何實現這一功能的,答案是純虛擬函式。 含有純虛擬函式的類是抽象類,不能生成物件,只能派生。

C++筆記之為什麼一個類定義了函式就幾乎肯定要定義拷貝建構函式拷貝賦值運算子

這個問題本來很簡單,但是時間久了就容易忘,所以做個筆記用來提示下自己 先來看看這樣一個類: class HasPtr { public: HasPtr(const string& s = string()) :ps(new string(s)), i(0) {

String str = new String("content") 建構函式有沒有返回值?new關鍵字到底在物件初始中做了什麼?

看到String str = new String("content")時想到一個問題:在我印象裡,建構函式時沒有返回值的,那麼建立的物件是如何賦值的呢?有沒有方法確定知道建構函式有沒有返回呢? 建構函式時沒有返回值的,賦值因為new關鍵字。 new的內部是呼叫了一個叫void * oper

27.能否在建構函式中丟擲異常?函式呢?

首先,我們要明確一點!一個函式執行的過程中,如果丟擲異常,會導致函式提前終止! 在C++建構函式中,既需要分配記憶體,又需要丟擲異常時要特別注意防止記憶體洩露的情況發生。因為在建構函式中丟擲異常,在概念上將被視為該物件沒有被成功構造,因此當前物件的解構函式就不會被呼叫。同時

String str = new String("content") 建構函式有沒有返回值?new關鍵字到底在物件初始中做了什麼?

看到String str = new String("content")時想到一個問題:在我印象裡,建構函式時沒有返回值的,那麼建立的物件是如何賦值的呢?有沒有方法確定知道建構函式有沒有返回呢? 建構函式時沒有返回值的,賦值因為new關鍵字。 new的內部是呼叫了一個叫v

C++中基類的函式為什麼要用virtual虛函式【轉】

(轉自:https://blog.csdn.net/iicy266/article/details/11906457) 知識背景          要弄明白這個問題,首先要了解下C++中的動態繫結。&n

C++中,組合類,類的函式呼叫順序

// test4.cpp : 定義控制檯應用程式的入口點。 //    1.宣告一個CPU類,包含等級rank,頻率frequency,電壓voltage等屬性,有兩個共有函式 //    stop 和ran。 // &nbs

C++中基類的函式為什麼要用virtual虛函式

知識背景          要弄明白這個問題,首先要了解下C++中的動態繫結。  正題          直接的講,C++中基類採用virtual虛解構函式是為了防止記憶體洩漏。具體地說,如果派生類中申請了記憶體空間,並在其解構函式中對這些記憶體空間進行釋放

(轉載)(C++)淺談多型基類函式宣告為虛擬函式

主要內容: 1、C++類繼承中的建構函式和解構函式 2、C++多型性中的靜態繫結和動態繫結 3、C++多型性中解構函式宣告為虛擬函式 1、C++類繼承中的建構函式和解構函式 在C++的類繼承中, 建立物件時,首先呼叫基類的建構函式,然後在呼叫下一

C++)淺談多型基類函式宣告為虛擬函式

主要內容: 1、C++類繼承中的建構函式和解構函式 2、C++多型性中的靜態繫結和動態繫結 3、C++多型性中解構函式宣告為虛擬函式 1、C++類繼承中的建構函式和解構函式 在C++的類繼承中, 建立物件時,首先呼叫基類的建構函式,然後在呼叫下一個派生類的建構函式,依次類推; 析構物件時,其

C#中集合物件初始器的使用

物件與集合初始化器 物件初始化器 Student stu= new Student(){ Id = 1, Name ="YJingLee", Age = 22 }; 更方便給物件賦值 集合初始化器 List<int> num = new List<in

關於c++預設建構函式函式拷貝建構函式move函式

在c++中,當我們定義一個類的時候,如果我們什麼都不定義的時候,c++編譯器會預設的為我們生成一些函式。 例如定義一個Example類。 class Example{ }; 當我們定義一個Example類的時候,不定義任何操作的時候,c++編譯系統將為Example類生成如

1C++】類&物件/建構函式/拷貝建構函式/操作符過載/函式

一、C++類 & 物件     C++ 在 C 語言的基礎上增加了面向物件程式設計,C++ 支援面向物件程式設計。類是 C++ 的核心特性,通常被稱為使用者定義的型別。     類用於指定物件的形式,它包含了資料表示法和用於處理資料的方法。類中的資料和方法稱為類的成員。函式在

《隨筆一》——C#中的“靜態建構函式物件初始語句”

  靜態建構函式 ● 我們在使用類中的靜態成員時,先要初始化這些成員。 在宣告靜態成員時、可以同時提供一個初始值。 但有時候我們需要執行更復雜的初始化操作, 這應該怎麼辦呢? ● 我們可以把建構函式宣告成static的, 一般來說, 靜態的建構函式初始化類的靜態欄位

C++筆記】編寫類string的建構函式函式賦值函式

#include<iostream> using namespace std; class String { public: String(const char *str=NULL); //普通建構函式 String(const Stri

C++類中的一些細節(過載重寫覆蓋隱藏,建構函式函式拷貝建構函式賦值函式在繼承時的一些問題)

1 函式的過載、重寫(重定義)、函式覆蓋及隱藏 其實函式過載與函式重寫、函式覆蓋和函式隱藏不是一個層面上的概念。前者是同一個類內,或者同一個函式作用域內,同名不同引數列表的函式之間的關係。而後三者是基類和派生類函式不同情況下的關係。 1.1 函式過載

C++中class類 的 建構函式函式

說明: demo.cpp:main.cpp所在之處 Line.h:線段類的.h檔案 Line.cpp:線段類的.cpp檔案 Coordinate.h:座標類的.h檔案 Coordinate.cpp:

c++單鏈表【建構函式運算子過載函式增刪查改等】

c++中的單向連結串列寫法:實現增刪查改、建構函式、運算子過載、解構函式等。建立標頭檔案SList.h#pragma once typedef int DataType; //SList要訪問SListNode,可以通過友元函式實現,友元函式在被訪問的類中 class SL

C++在單繼承多繼承虛繼承時,建構函式複製建構函式賦值操作符函式的執行順序執行內容

一、本文目的與說明     1. 本文目的:理清在各種繼承時,建構函式、複製建構函式、賦值操作符、解構函式的執行順序和執行內容。     2. 說明:雖然複製建構函式屬於建構函式的一種,有共同的地方,但是也具有一定的特殊性,所以在總結它的性質時將它單獨列出來了。