《THINKING IN C++》里面一个习题,关于重载运算符的
写一个包含string和static int成员的类Bird。在预设的构造函数中,根据类的名字(Bird #1,Bird #2等等),使用int成员自动地生成一个置于string中的标志符。为ostream增加operator<<以打印Bird对象。写一个赋值operator=和一个拷贝构造函数。在main中验证他们都可以正确运行。
对于这个题目,对“使用int成员自动地生成一个置于string中的标志符”这句话的实现不太会,还请高手指点。
问题点数:15、回复次数:12Top
1 楼hxblvc(还是好好学吧...)回复于 2004-12-01 18:58:28 得分 0
构造出一个Bird. static int 成员进行自加1运算. 不就可以得到一个标志符.Top
2 楼hxblvc(还是好好学吧...)回复于 2004-12-01 19:00:52 得分 0
上边少写一个字:
每构造出一个Bird. static int 成员进行自加1运算. 不就可以得到一个标志符.
,标志符目的应该是和其它的Bird对象进行区分吧.Top
3 楼angelanpan()回复于 2004-12-01 19:16:26 得分 0
置于string中怎么理解?
如果只是对bird对象进行区分的话,string也就够了。而且static是所有的bird对象共享的,不能区分对象的啊?
反正我对这个题目意思都不是太明白。翻译好象有些难理解!Top
4 楼questionboy(我行我素)回复于 2004-12-01 19:39:09 得分 12
是不是這個意思
#include <iostream>
#include <tchar>
class CBird
{
public:
CBird()
{
++m_nCount;
TCHAR ch[64];
stprintf( ch, TEXT("Bird #%d"), m_nCount );
m_stName = ch;
}
CBird( const CBird& bd )
{
operator = ( bd );
}
private:
static int m_nCount;
std::string m_stName;
public:
std::ostream& operator <<( std::ostream& o )
{
o<<m_stName<<std::endl;
return o;
}
const CBird& operator = ( const CBird& bd )
{
m_stName = bd.m_stName;
return *this;
}
};
int CBird::m_nCount = 0;
在拷貝和付值操作中我沒有遞增引用記數,是因為不知道題目的確切要求,你自己可以更改,但是我想大概的意思是這樣的,沒有編譯測試,自己略微改一下吧
Top
5 楼angelanpan()回复于 2004-12-01 20:02:03 得分 0
can not open file "tchar"
tchar 是个什么样的文件?Top
6 楼questionboy(我行我素)回复于 2004-12-02 08:35:24 得分 0
哈哈,我好意思,應該是<tchar.h>,說起來比較麻煩,主要是為了針對UNICODE和非UNICODE環境,所以我是用了TCHAR,你也可以把這個部分改為char,只要你自己確定自己程序的使用範圍就好了Top
7 楼angelanpan()回复于 2004-12-02 22:49:51 得分 0
还是不行啊,虽然好象能找到tchar这个文件,但是还是有两个错误啊!
error C2065: 'stprintf' : undeclared identifier
error C2065: 'TEXT' : undeclared identifier
请问这两个分别是什么作用?Top
8 楼angelanpan()回复于 2004-12-02 22:56:09 得分 0
我想这正是我需要的
是不是把"Bird #%d"写入ch里面去,正应该是这样区分bird对象!
但是找不到stprintf和text怎么办?Top
9 楼alanzhu(爱的逃兵)回复于 2004-12-03 09:14:43 得分 3
<wchar.h>,应该是这个,而且应是swprintfTop
10 楼alanzhu(爱的逃兵)回复于 2004-12-03 09:17:17 得分 0
TEXT("")改成L""Top
11 楼questionboy(我行我素)回复于 2004-12-03 09:25:41 得分 0
呵呵說來話長,你這樣吧,把這部分改掉,這樣應該可以運行
TCHAR ch[64];
stprintf( ch, TEXT("Bird #%d"), m_nCount );
改成
char ch[64];
sprintf( ch, "Bird #%d", m_nCount );
解釋起來很複雜,你看看有關UNICODE編程方面的书吧,最簡單的說法就是,使用TCHAR和TEXT可以隨著編譯環境是否UNICODE而自動調用相關的函數,其定義大概如下,如果一時不懂就算了,以後會懂的
#ifdef UNICODE
typedef wchar_t TCHAR
#else
typedef char TCHAR
#endifTop
12 楼alanzhu(爱的逃兵)回复于 2004-12-03 09:26:09 得分 0
示例
#include <stdio.h>
#include <wchar.h>
void main()
{
wchar_t ch[64];
swprintf( ch, L"Bird #%d", 3 );
wprintf(ch);
}
Top




