上課上到這
就開始覺得難了
難得指標懂了說@@
建構子和運算子不太會了說
能否解釋一些些呢
主要是 在一個程式中 我會分不出哪個是建構子 哪個是成員函數
運算子的話 能否介紹"+"和"="這兩個就好囉
希望有大大能幫忙 先在此感恩囉 ^^
2005-03-16 13:31:44 · 7 個解答 · 發問者 Anonymous in 電腦與網際網路 ➔ 程式設計
建構子大概懂了
不過建構子好像有分很多類別說
能否幫忙簡略介紹呢
謝謝啦 ^^
2005-03-18 04:00:27 · update #1
建構子:
比如說你在一個分數的class叫fraction.
如果你要用fraction, 你就要宣告一個fraction的變數.
在你宣告時你會執行fraction建構子. 因為你正在建造一個fraction嘛... :)
一般來說你在寫一個 class的時候如果沒有寫建構子的話, C++會自動寫給一個fraction()的建構子給你. 因為如果一個 class沒有建構子的話就不能被宣告. 意思就是如果你不知道怎麼作fraction那你怎麼有fraction? 如果你自己寫了一個建構子, C++就不會幫你寫. 像以下的例子. 我已經寫了一個fraction(int, int)的建構子. 所以C++就不會幫我寫fraction()的建構子.
那建構子要怎麼寫?
建構子跟一般函數大致是一樣的. 只有兩點和函數不一樣.
第一, 建構子不需要回傳型別. 因為變數已經宣告了.
第二, 建構子的名字要跟class的名字一模一樣. 因為你在建造一個class嘛... :)
舉例
在frac.h裡
class fraction { //class fraction的定義
private:
int nominator;
int denominator;
public:
fraction(int, int); // 建構子
void print(); //一般函數
};
在frac.cpp裡
#include "frac.h"
//建構子的定義
fraction::fraction(int n, int d) : nominator(n), denominator(d)
{}
//一般函數的定義
void fraction::print()
{
cout << nominator << "/" << denominator;
}
看出不同了嗎? 有問題再問
運算子
運算子是用來執行class和class之間的+, -, *, / 等等
如果我們要加減分數fraction的話. 我們就要寫fraction的+和-的運算子.
一般來說在程式裡寫"A+B"等於寫"A.+(B)".看起來有一點奇怪. 不過你仔細看就不會了.
"A+B"是在執行在A裡的+運算子,所以有"A.+".因為運算子跟函數的用法一樣所以你有"A.+(B)"
運算子和一般函數差不多, 只有三大差別
1. 運算子回傳型別大部分是class自己.比如fraction的+的運算子的回傳型別大部分要是fraction&, const fraction &, 或fraction.
2. 運算子名字之前一定要有operator這個字
3. 運算子大部分要把自己回傳回去. 自己是"*this".
分數的加法: A/B + C/D = (AD+BC)/AD
fraction +的運算子:
fraction& fraction::operator +(const fraction &rhs)
{
nominator = nominator*rhs.denominator+
rhs.nominator*denominator;
denominator = denominator*rhs.denominator;
return(*this);
}
分數的減法: A/B - C/D = (AD-BC)/AD
fraction -的運算子:
fraction& fraction::operator -(const fraction &rhs)
{
nominator = nominator*rhs.denominator-
rhs.nominator*denominator;
denominator = denominator*rhs.denominator;
return(*this);
}
以上就是建構子和運算子的簡介.
懂不懂?不懂在問?
全部的程式
frac.h:
#include
using namespace std;
class fraction {
private:
int nominator;
int denominator;
public:
fraction(int, int);
void print();
fraction& operator +(const fraction &);
fraction& operator -(const fraction &);
};
frac.cpp
#include "frac.h"
fraction::fraction(int n, int d) : nominator(n), denominator(d)
{}
void fraction::print()
{
cout << nominator << "/" << denominator;
}
fraction& fraction::operator +(const fraction &rhs)
{
nominator = nominator*rhs.denominator+
rhs.nominator*denominator;
denominator = denominator*rhs.denominator;
return(*this);
}
fraction& fraction::operator -(const fraction &rhs)
{
nominator = nominator*rhs.denominator-
rhs.nominator*denominator;
denominator = denominator*rhs.denominator;
return(*this);
}
test.cpp
#include
#include
#include "frac.h"
using namespace std;
int main(int argc, char *argv[])
{
fraction A(1,2), B(2,3);
A = A + B;
A.print();
system("PAUSE");
return EXIT_SUCCESS;
}
------------------------------------------------------------------------------
建構子主要有分一般建構子, 內定建構子(default constructor)和拷貝建構子(copy constructor).
上面說過建構子跟一般函數一樣, 只不過沒有回傳型別. 所以建構子的格式是
<建構子的名字>(<輸入值>)
比如說
fraction(int, int)
fraction()
fraction(int)
fraction(const fraction&)
以上四個都是建構子, 只不過他們的輸入值不一樣.
第二個是內定的建構子. 也就是說如果你沒寫建構子. C++給的就是這個建構子.
以下是fraction的拷貝建構子(copy constructor).
fraction() : nominator(0), denominator(1)
{}
第四個是拷貝建構子(copy constructor). 拷貝建構子的輸入值是class他自己.
以下是fraction的拷貝建構子(copy constructor).
fraction(const fraction &f) : nominator(f.nominator), denominator(f.denominator)
{}
建構子除了建造變數, C++也用建構子運換type.
比如說以上的class fraction再加上一個建構子
fraction(int n) : nominator(n), denominator(1)
{}
在test.cpp的main裡你就可以執行以下的句子
fraction C;
C = 1;
C.print();
顯示出來的是"1/1"
懂嗎?
不懂再問, ok? :)
2005-03-17 00:51:04 · answer #1 · answered by 龍 7 · 0⤊ 0⤋
到下面的網址看看吧
▶▶http://*****
2014-07-22 17:24:29 · answer #2 · answered by Anonymous · 0⤊ 0⤋
●*****(官方網站 *****)體育博彩、視訊遊戲、真人遊戲、電子機台●
● 單一帳號與額度全站共用,額度免轉換。
●完全免下載、開啟網頁直接玩。
● 運動賽事超高賠率投注 0.975
● 市面上唯一合法經營,安心又放心。
● 彩金 5 分鐘快速領取,超高效率,業界第一。
● 各項球賽直播****觀看。
●最公平公正機械手臂百家樂。
●真人對戰緊張刺激,電子機台聲光效果迷人。
●下注額外獲得紅利點數,兌換商品 (汽機車)及獎金。
●線上客服24H全年無休為您服務。
●『海量電影、X片、音樂、KTV』免費觀賞
●官方網站:*****●
2013-09-01 21:30:29 · answer #3 · answered by Anonymous · 0⤊ 0⤋
嘖嘖~我也想要>___<救救我的程式吧!!
2006-10-02 20:29:20 · answer #4 · answered by 微笑 1 · 0⤊ 0⤋
神人~即時通可不可以給我~不會我也想問你
2006-04-12 19:47:53 · answer #5 · answered by ? 1 · 0⤊ 0⤋
為什麼他這麼厲害 我也想變很會打程式 請教我
2006-03-23 20:02:23 · answer #6 · answered by ? 1 · 0⤊ 0⤋
.h 要加
#ifndef FRAC
#define FRAC
//...
#endif
2005-03-22 10:55:10 · answer #7 · answered by Anonymous · 0⤊ 0⤋