English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

所謂建構子多載是 同名的建構子 但是不同的引數嗎 ?
課本上寫的不太清楚... 例子 也看不太懂...
請各位大大 能幫我解說一下建構子多載是怎樣的情況會用到呢?
有例子 說明更好 謝謝嚕^^

2005-04-06 22:36:55 · 2 個解答 · 發問者 芙蕾 1 in 電腦與網際網路 程式設計

2 個解答

一點都沒錯. 建構子多載是同名的建構子,但是不同的引數. 建構子多載的用處是讓你用不同的方法來宣告變數. 比如說你可以用以下的方法來宣告string和ofstream的變數:

string a;
string b(“hello”);
string c(a);

ofstream x;
ofstream y(“file1.txt”);
ofstream z(x);

為什麼可以這樣做?因string和ofstream的class裡有建構子多載.

比如說你在寫一個分數的class叫fraction.
一般來說你在寫一個 class的時候如果沒有寫建構子的話, C++會自動寫給一個fraction()的建構子給你. 因為如果一個 class沒有建構子的話就不能被宣告. 意思就是如果你不知道怎麼作fraction那你怎麼有fraction? 如果你自己寫了一個建構子, C++就不會幫你寫. 像以下的例子. 我已經寫了一個fraction(int, int)的建構子. 所以C++就不會幫我寫fraction()的建構子.
在frac.h裡
class fraction { //class fraction的定義
private:
int nominator;
int denominator;
public:
fraction(int, int); // 建構子
void print(); //一般函數
};
但是整數也是一種分數啊.所以我們要寫一個只有一個引數的建構子. 所以frac.h變成:
class fraction { //class fraction的定義
private:
int nominator;
int denominator;
public:
fraction(int, int); // 第一個建構子
fraction(int);// 第二個建構子
void print(); //一般函數
};

fraction(int, int);和fraction(int);就是建構子多載.

用以上的class, 使用者可以用以下的兩個方法來宣告分數的變數
fraction a(x, y); -------------- a是x/y
fraction b(z);------------------ b是z/1


fraction a(1,2); // a是1/2 = 0.5.
Fraction b(3); // b是3/1 = 3.

但使用者不能用以下的方法來宣告分數的變數
fraction a;
因為我們沒有一個建構子不用引數的. 如果要允許使用者用以上的方法來宣告分數的變數的話我們就要在加一個不用引數的建構子.

class fraction { //class fraction的定義
private:
int nominator;
int denominator;
public:
fraction(int, int); // 第一個建構子
fraction(int);// 第二個建構子
fraction();//第三個建構子
void print(); //一般函數
};

fraction(int, int); 和 fraction(int); 和fraction();就是建構子多載.

在frac.cpp裡
#include "frac.h"
//建構子的定義
fraction::fraction(int n, int d) : nominator(n), denominator(d)
{}
fraction::fraction(int n) : nominator(n), denominator(1)
{}
fraction::fraction() : nominator(0), denominator(1)
{}

當然你可以加別的建構子. 像fraction(float, float);或fraction(char, char);也可以.

懂不懂? 不懂或有問題再問

2005-04-07 11:21:36 補充:
不用客氣. 你懂就好... :)

2005-04-07 00:10:18 · answer #1 · answered by 7 · 0 0

到下面的網址看看吧

▶▶http://candy5660601.pixnet.net/blog

2014-06-29 18:12:07 · answer #2 · answered by OEBOMKPTTBMT 1 · 0 0

fedest.com, questions and answers