Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

問一下 C++ 的語法(const)...

0 views
Skip to first unread message

省港澳長途牌王 哈哈

unread,
Jan 30, 2002, 6:06:46 AM1/30/02
to
《 在 Learn...@bbs.mis.cycu.edu.tw (..) 的大作中提到: 》
: 在 C++ 的 class 宣告中看到下面的 functin member 宣告
: class FastString {
: ....
: public:
: int Length(void) const;
: ....
: };
: 請問最後面的 Length 函式後面的 const 用意是...?
在函式的標頭後面加上const關鍵字,是告訴C++這個member function
可以處理 [31;1m常數變數 [m。舉例來說好了
class int_set {
private:
public:
int_set(void); //constructor
void set(int value); //add a value
void clear(int value); //delete a value
int test(int value) const; //test value live or not
}
這個類別可處理數字集合,int_set類別中,set 和 clear這兩個
member function 可以用來改變集合的內容,而test不會。
但是C++不知道何時可以使用常數何時不行,所以在test後加上const
C++就允許它作用於常數,set 和 clear沒有所以不行處理常數


[m [1;34m※ 來源:‧蛋捲廣場 bbs.tku.edu.tw‧[FROM: 218.162.2.78] [m

my way my life

unread,
Jan 30, 2002, 7:15:31 AM1/30/02
to
※ 引述《SHBK...@bbs.tku.edu.tw (省港澳長途牌王 哈哈 )》之銘言:

意思就是說,可以把 const 的變數傳給它囉?
允許處理,是不是可以取址、取值...
但還是不能改變其內容吧?

--

有時候,人一旦被傷害了,自暴自棄就成了唯一的選項。
人們不明白的是,真正能令自己悲傷的,正是自己最珍貴的東西。
因為珍貴,所以永遠都不能放棄;因為珍貴,所以永遠都不該掉頭就走。
多年以後,我終於領悟這個道理。

--
[1;32m※ Origin: [33m元智大學 風之塔 [37m<bbs.yzu.edu.tw> [m
[1;32m※ From : [36m218-162-11-194.hinet-ip.hinet.net [m

旅行

unread,
Jan 30, 2002, 7:18:28 AM1/30/02
to
※ 引述《SHBK...@bbs.tku.edu.tw (省港澳長途牌王 哈哈 )》之銘言:
> 在函式的標頭後面加上const關鍵字,是告訴C++這個member function
> 可以處理 [31;1m常數變數 [m。舉例來說好了
> class int_set {
> private:
> public:
> int_set(void); //constructor
> void set(int value); //add a value
> void clear(int value); //delete a value
> int test(int value) const; //test value live or not
> }
> 這個類別可處理數字集合,int_set類別中,set 和 clear這兩個
> member function 可以用來改變集合的內容,而test不會。
> 但是C++不知道何時可以使用常數何時不行,所以在test後加上const
> C++就允許它作用於常數,set 和 clear沒有所以不行處理常數
> [m [1;34m※ 來源:‧蛋捲廣場 bbs.tku.edu.tw‧[FROM: 218.162.2.78] [m

不是這樣的
member function加上const修飾指的是此member function不會也不能更改
member variable (mutable 變數除外) 也就是說const 的member function
不能更改到此物件的state


--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: 211.21.191.127

省港澳長途牌王 哈哈

unread,
Jan 30, 2002, 10:49:28 AM1/30/02
to
《 在 Wisem...@bbs.cs.nthu.edu.tw (旅行) 的大作中提到: 》
: member function加上const修飾指的是此member function不會也不能更改

: member variable (mutable 變數除外) 也就是說const 的member function
: 不能更改到此物件的state
嗯嗯...謝謝指正...剛剛去查了一下msdn...
的確跟Wiseman大哥說的一樣..
(我po的是參考某本C++的書的..)
我想應該以msdn為主吧..
我把他po出來...

Constant Member Functions
C++ Specific

Declaring a member function with the const keyword specifies that
the function is a "read-only" function that does not modify the object
for which it is called.

To declare a constant member function,
place the const keyword after the closing parenthesis of the argument list.
The const keyword is required in both the declaration and the definition.
A constant member function cannot modify any data members or
call any member functions that aren't constant.

END C++ Specific

Example

// Example of a constant member function
class Date
{
public:
Date( int mn, int dy, int yr );
int getMonth() const; // A read-only function
void setMonth( int mn ); // A write function;
// cannot be const
private:
int month;
};

int Date::getMonth() const
{
return month; // Doesn't modify anything
//這裡的Doesn't modify anything是指連常數都不行嗎?
// 請高手解答吧
}
void Date::setMonth( int mn )
{
month = mn; // Modifies data member

Melli...@bbs.cs.nthu.edu.tw

unread,
Jan 31, 2002, 7:57:09 AM1/31/02
to
※ 引述《SHBK...@bbs.tku.edu.tw (省港澳長途牌王 哈哈 )》之銘言:
> 《 在 Wisem...@bbs.cs.nthu.edu.tw (旅行) 的大作中提到: 》
> : member function加上const修飾指的是此member function不會也不能更改
> : member variable (mutable 變數除外) 也就是說const 的member function
> : 不能更改到此物件的state
> 嗯嗯...謝謝指正...剛剛去查了一下msdn...
> 的確跟Wiseman大哥說的一樣..
> (我po的是參考某本C++的書的..)

hmm....它真的這樣寫?
把這本書丟了吧.....:p
不然賣掉再貼點錢買本好一點的也行~~:p

> 我想應該以msdn為主吧..

其實不應該以 MSDN 為準,M$ 又不算是 C++ Standard 規格的制定機構。
BCB 和 GNU 的 compiler 還比 M$ 的接近標準呢!
花錢可以買到標準的 spec 的。
--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: 61-216-50-128.HINET-IP.hinet.net

^_^

unread,
Jan 31, 2002, 10:17:05 AM1/31/02
to
※ 引述《SHBK...@bbs.tku.edu.tw (省港澳長途牌王 哈哈 )》之銘言:
> 《 在 Wisem...@bbs.cs.nthu.edu.tw (旅行) 的大作中提到: 》
> : member function加上const修飾指的是此member function不會也不能更改
> : member variable (mutable 變數除外) 也就是說const 的member function
> : 不能更改到此物件的state
> int Date::getMonth() const
> {
> return month; // Doesn't modify anything
> //這裡的Doesn't modify anything是指連常數都不行嗎?
> // 請高手解答吧
> }
常數本來就不能修改
不管是global 的const variable 或是 const member variable
都一樣

跟member function是否是const 一點關係也沒有


--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: g894314.HSIN-B.ab.nthu.edu.tw

^_^

unread,
Jan 31, 2002, 10:32:44 AM1/31/02
to
※ 引述《Mellisa》之銘言:

> ※ 引述《SHBK...@bbs.tku.edu.tw (省港澳長途牌王 哈哈 )》之銘言:
> > 《 在 Wisem...@bbs.cs.nthu.edu.tw (旅行) 的大作中提到: 》
> > 嗯嗯...謝謝指正...剛剛去查了一下msdn...
> > 的確跟Wiseman大哥說的一樣..
> > (我po的是參考某本C++的書的..)
> hmm....它真的這樣寫?
> 把這本書丟了吧.....:p
> 不然賣掉再貼點錢買本好一點的也行~~:p

沒錯~
這麼爛的書不要也罷~

像c++ 這麼複雜的程式語言, 要能夠很精確描述出他的精神且兼顧到眾多細節
其實沒那麼簡單, 國內的作家寫的c++的書幾乎都不夠格
建議你看c++之父寫的the c++ programming language.
裡頭有一般國產c++教材裡面所看不到的深度與廣度
(有中譯本 , 是william大大翻的 )


> > 我想應該以msdn為主吧..
> 其實不應該以 MSDN 為準,M$ 又不算是 C++ Standard 規格的制定機構。
> BCB 和 GNU 的 compiler 還比 M$ 的接近標準呢!
> 花錢可以買到標準的 spec 的。

高叉旗袍辣妹妹

unread,
Jan 31, 2002, 3:00:09 PM1/31/02
to
【 在 Melli...@bbs.cs.nthu.edu.tw () 的大作中提到: 】
: ※ 引述《SHBK...@bbs.tku.edu.tw (省港澳長途牌王 哈哈 )》之銘言:

: > 《 在 Wisem...@bbs.cs.nthu.edu.tw (旅行) 的大作中提到: 》
: > 嗯嗯...謝謝指正...剛剛去查了一下msdn...
: > 的確跟Wiseman大哥說的一樣..
: > (我po的是參考某本C++的書的..)
: hmm....它真的這樣寫?
: 把這本書丟了吧.....:p
: 不然賣掉再貼點錢買本好一點的也行~~:p
: > 我想應該以msdn為主吧..

: 其實不應該以 MSDN 為準,M$ 又不算是 C++ Standard 規格的制定機構。
: BCB 和 GNU 的 compiler 還比 M$ 的接近標準呢!
: 花錢可以買到標準的 spec 的。

comeau的c/c++ compiler比上述的compiler都更接近iso或ansi的標準。
而且比上述產品都便宜(很多)。
msdn本身並沒問題,
尤其在基本的c/c++ syntax description的地方。
我引約記得有人把specification掃成pdf放在網路上。
最後,話說回來,
看specification如果手頭上的compiler不支援不是白搭?
--

[m [1;33m※來源 : [1;36m 台北科大計中紅樓資訊站 [1;35mredbbs.cc.ntut.edu.tw
[1;32m※FROM : [1;37m140.124.13.2 [m

御風只配做澀木頭

unread,
Jan 31, 2002, 8:27:34 PM1/31/02
to
※ 引述《Jamez...@redbbs.cc.ntut.edu.tw (高叉旗袍辣妹妹)》之銘言:
: 【 在 Wisem...@bbs.cs.nthu.edu.tw (^_^) 的大作中提到: 】
: : 常數本來就不能修改
: const variable也是變數,
: 只是在生命週期中不能被修改。
: 所以翻成「常數」不太恰當吧?

一般不能被修改的變數,不就是叫做常數嗎?:-)

--
※ Origin: 窈窕淑女 ◆ From: 203.204.86.140
--
※【窈窕淑女】telnet://lady.twbbs.org
http://lady.twbbs.org/~bbs/

^_^

unread,
Jan 31, 2002, 8:58:17 PM1/31/02
to
※ 引述《Jamez...@redbbs.cc.ntut.edu.tw (高叉旗袍辣妹妹)》之銘言:
> 【 在 Wisem...@bbs.cs.nthu.edu.tw (^_^) 的大作中提到: 】
> : 常數本來就不能修改
> const variable也是變數,
> 只是在生命週期中不能被修改。
> 所以翻成「常數」不太恰當吧?

很恰當啊, const 是constant 的縮寫,
constant 就是常數的意思,

不然要怎麼翻才恰當呢?

Melli...@bbs.cs.nthu.edu.tw

unread,
Feb 1, 2002, 9:55:30 AM2/1/02
to
※ 引述《Jamez...@redbbs.cc.ntut.edu.tw (高叉旗袍辣妹妹)》之銘言:
> 【 在 Melli...@bbs.cs.nthu.edu.tw () 的大作中提到: 】

> : hmm....它真的這樣寫?
> : 把這本書丟了吧.....:p
> : 不然賣掉再貼點錢買本好一點的也行~~:p
> : 其實不應該以 MSDN 為準,M$ 又不算是 C++ Standard 規格的制定機構。
> : BCB 和 GNU 的 compiler 還比 M$ 的接近標準呢!
> : 花錢可以買到標準的 spec 的。
> comeau的c/c++ compiler比上述的compiler都更接近iso或ansi的標準。
> 而且比上述產品都便宜(很多)。
> msdn本身並沒問題,
> 尤其在基本的c/c++ syntax description的地方。
> 我引約記得有人把specification掃成pdf放在網路上。
> 最後,話說回來,
> 看specification如果手頭上的compiler不支援不是白搭?

這倒也是,不過如果程式碼是要跑來跑去的(ex:自己寫的library)
又用到比較少用的語法,就只能祈禱了~~~
--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: 61-224-65-127.HINET-IP.hinet.net

0 new messages