1. 程式人生 > >C++中建構函式的作用

C++中建構函式的作用

建構函式用於解決類中的物件初始化的問題
建構函式是一類特殊的函式,與其他的成員函式不同的是建構函式建構函式不需要使用者來呼叫它,而是建立物件的時候自動的執行

#include <iostream>
//#include "student.h"
//#include <string>
//#include <cstring>
using namespace std;
class Time
{ public:
    Time()    //建構函式必須與類的名稱相同
    {                              //利用建構函式對物件中的資料成員進行初始化
hour=0; minute=0; sec=0; } void set_time(); void show_time(); private: int hour; int minute; int sec; }; void Time::set_time() { cin>>hour; cin>>minute; cin>>sec; } void Time::show_time() { cout<<hour<<":"
<<minute<<":"<<sec<<endl; } int main() { Time t1; t1.set_time(); t1.show_time(); Time t2; t2.show_time(); return 0; }

建構函式不需要使用者呼叫,也不能夠被使用者呼叫。

帶引數的建構函式

#include <iostream>
//#include "student.h"
//#include <string>
//#include <cstring>
using namespace std; class Box{ public: Box(int,int,int); int volume(); private: int height; int width; int length; }; Box::Box(int h, int w, int len) { height=h; width=w; length=len; } int Box::volume() { return height*width*length; } int main() { Box box1(12,25,36); //建立物件box1並且指定物件的長寬高 cout<<"the voluime of box1 is"<<box1.volume()<<endl; Box box2(15,65,32); cout <<"the volume of box2 is"<<box2.volume()<<endl; return 0; }

帶引數的建構函式中的形參,其對應的實參在定義物件時給定。
使用帶有引數的建構函式可以方便的實現對不同的物件進行初始化。

#include <iostream>
//#include "student.h"
//#include <string>
//#include <cstring>
using namespace std;
class Box{
public:
    Box();
    Box(int h,int w,int len):height(h),width(w),length(len){}    //引數初始化列表使用形式
    ////宣告一個有參的建構函式,用引數的初始化表對引數成員進行初始化
    int volume();
private:
    int height;
    int width;
    int length;


};
Box::Box() {
    height=5;
    width=8;
    length=23;
}
int Box::volume() {
    return height*width*length;
}
int main() {
   Box box1;   //建立物件box1並且指定物件的長寬高
    cout<<"the voluime of box1 is"<<box1.volume()<<endl;
    Box box2(15,65,32);
    cout <<"the volume of box2 is"<<box2.volume()<<endl;
    return 0;
}

相關推薦

C++建構函式作用

建構函式用於解決類中的物件初始化的問題 建構函式是一類特殊的函式,與其他的成員函式不同的是建構函式建構函式不需要使用者來呼叫它,而是建立物件的時候自動的執行 #include <iostr

C++ 建構函式和解構函式能不能被顯示呼叫

                程式碼: view plaincopy to clipboardprint?#include <iostream>   using namespace std;     class A   {   public:       A()       {         

c++建構函式呼叫另一建構函式的問題

今天去一家公司面試,筆試中碰到一個題,覺得有些意思,自己當時其實也沒有完全搞清楚,這裡跟大家分享一下,也算是自己做個筆記 題目如下:問下列程式碼的列印結果為0嗎? #include <stdlib.h> #include <iostre

C++建構函式的理解

程式執行的情況為: 10 25 54↙  (從鍵盤輸入新值賦給t1的資料成員) 10:25:54    (輸出t1的時、分、秒值)  0:0:0   (輸出t2的時、分、秒值)在類中定義了建構函式Time,它和所在的類同名。在建立物件時自動執行建構函式,它的作用是對該物件中的資料成員賦初值0。請不要誤認為是在

C++建構函式預設引數學習筆記

C++中函式在定義時可以預先宣告預設的形參值,呼叫時如果給出的實參則用實參初始化形參;如果沒有給出實參,則採用預先宣告的預設形參值。 在Java不能在構造方法中使用預設的引數,不知道C語言中能否使用,C++好像是很獨特的一種使用方式 以下是一個簡單的例項: #inclu

C++建構函式和解構函式丟擲異常問題

一. 丟擲異常 1.1 丟擲異常(也稱為拋棄異常)即檢測是否產生異常,在C++中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異常。 該語句的格式為: throw 表示式; 如果在try語句塊的程式段中(包括在其中呼叫的函式)發現了異常,且拋棄了

C++建構函式詳解

                                        c++類的建構函式詳解                         一、 建構函式是幹什麼的 class Counter { public:          // 類Counter的建構函式          // 特點:

C++建構函式,拷貝建構函式,解構函式

C++中預設建構函式就是沒有形參的建構函式。準確的說法,按照《C++ Primer》中定義:只要定義一個物件時沒有提供初始化式,就是用預設建構函式。為所有 的形參提供預設實參的建構函式也定義了預設建構函式。 合成的預設建構函式,即編譯器自動生成的預設建構函式。《C++ Pr

C++建構函式、解構函式、虛擬函式及普通成員函式的理解

這裡我們主要討論建構函式、解構函式、普通成員函式、虛擬函式,對這幾種函式說說自己的理解。 對建構函式的總結 對建構函式,我們先來看看如下的程式碼 #include <iostream> using namespace std; cla

c++建構函式初始化的方法以及主要區別

一、我的問題是關於初始化C++類成員的。我見過許多這樣的程式碼: CSomeClass::CSomeClass() { x=0; y=1; } 而在別的什麼地方則寫成下面的樣子: CSomeClass::CSomeClass() : x(0), y(1) { } 我的一些程式設計師朋友說第

C++建構函式能呼叫虛擬函式嗎?

      環境:XPSP3 VS2005         今天黑總給應聘者出了一個在C++的建構函式中呼叫虛擬函式的問題,具體的題目要比標題複雜,大體情況可以看如下的程式碼: class Base { public: Base() { Fuction(); }

C++建構函式與解構函式的呼叫順序

1.參考文獻 2.建構函式、解構函式與拷貝建構函式介紹 2.1建構函式 建構函式不能有返回值預設建構函式時,系統將自動呼叫該預設建構函式初始化物件,預設建構函式會將所有資料成員都初始化為零或空 建立一個物件時,系統自動呼叫建構函式2.2解構函式 解構函式沒有引數,也

C++建構函式和解構函式可以丟擲異常嗎?

一.建構函式 1. 建構函式中丟擲異常,會導致解構函式不能被呼叫,但物件本身已申請到的記憶體資源會被系統釋放(已申請到資源的內部成員變數會被系統依次逆序呼叫其解構函式)。 2. 因為解構函式不能被呼叫,所以可能會造成記憶體洩露或系統資源未被釋放。 3. 建構函式中可以丟擲異

C++建構函式初始化列表為什麼會比建構函式賦值要高效

Test { Test(test& t1) { this->t=t1; } private: test t; } 相信很多人跟我一樣,非常困惑為什麼Test構造時會先呼叫test的建構函式,再呼叫test類的賦值操作符。那是因為賦值操作符不能產生新的物件,Te

C++建構函式和解構函式顯式呼叫的方法

C++ new用法的正確方法應該如何操作?在這篇文章中我們將會根據其兩種不同的含義分別介紹一下它的影音方法,希望能給大家帶來一些幫助。C++程式語言中有一種叫做new的術語。不過這一概念是比較模糊的,有些人把它理解為new函式,但是有的人又會把它理解為new運算子。那麼它的真正含義又是如何的呢?在這裡我們將會

C++建構函式,拷貝建構函式和賦值函式的區別和實現

C++中一般建立物件,拷貝或賦值的方式有建構函式,拷貝建構函式,賦值函式這三種方法。下面就詳細比較下三者之間的區別以及它們的具體實現 1.建構函式 建構函式是一種特殊的類成員函式,是當建立一個類的物件時,它被呼叫來對類的資料成員進行初始化和分配記憶體。(建構函式的命名必須

關於C++建構函式的常見疑問

基本概念   我們已經知道在定義一個物件時,該物件會根據你傳入的引數來呼叫類中對應的建構函式。同時,在釋放這個物件時,會呼叫類中的解構函式。其中,建構函式有三種,分別是預設建構函式,有參建構函式和拷貝建構函式。在類中,如果我們沒有自行定義任何的建構函式,編譯器會為我們提供兩種建構函式(預設建構函式和拷貝建構函

C++類建構函式

我們在定義一個類之後,在利用該類定義了一個物件後,往往需要對該物件中資料成員變數進行初始化。有時候我們會誤操作,忘記初始化或者重複初始化,這樣做都會造成程式的崩潰。C++給我們提供了一個很有用的方法,就是類的建構函式。 C++類的建構函式,和其它成員函式一樣,在類中定義。不過建構函式和其他成

C#類繼承建構函式的執行序列

不知道大家在使用繼承的過程中有木有遇到過呼叫建構函式時沒有按照我們預期的那樣執行呢?一般情況下,出現這樣的問題往往是因為類繼承結構中的某個基類沒有被正確例項化,或者沒有正確給基類建構函式提供資訊,如果理解在物件生命週期的這個階段發生的事情,將更利於解決此類問題。 為了例項化派生的類,必須先例項化它的基類。而

C++ 拷貝建構函式淺拷貝與深拷貝

淺拷貝建構函式 看一段拷貝建構函式的程式碼 #include <iostream> #include <cstring> using namespace std; class Array{ public : Array()