我现在出现这种问题~~
我派生了一个新类CMyString 派生自CString
但是现在出现问题就是 好象CSTRING类的 operator+ 不能继承
////////////////////////////////////////////////////////////////////////////
class CMyString:public CString
{public:
CMyString();
CMyString(char *p);
// CString operator +( CString str1);};
///////////////////////////////////////////////////////////////////////////
如果 CMyString aaa,bbb,ccc;
aaa="aaa";bbb="bbb";ccc="ccc";
aaa.Insert(2,"hhh");
这个是可以成功的。但是ccc=aaa+bbb;
就会出现错误!是不是必须要重载运算符才可以使用?我有点笨还不会写重载代码 请各位大侠帮帮我写一个重载运算符号我好学习学习 谢谢了
我派生了一个新类CMyString 派生自CString
但是现在出现问题就是 好象CSTRING类的 operator+ 不能继承
////////////////////////////////////////////////////////////////////////////
class CMyString:public CString
{public:
CMyString();
CMyString(char *p);
// CString operator +( CString str1);};
///////////////////////////////////////////////////////////////////////////
如果 CMyString aaa,bbb,ccc;
aaa="aaa";bbb="bbb";ccc="ccc";
aaa.Insert(2,"hhh");
这个是可以成功的。但是ccc=aaa+bbb;
就会出现错误!是不是必须要重载运算符才可以使用?我有点笨还不会写重载代码 请各位大侠帮帮我写一个重载运算符号我好学习学习 谢谢了
解决方案 »
- 单文档如何刷新空白文档
- 请教高手WindowFromPoint不可以获得disable或hidden属性的子窗口的句柄,而用ChildWindowFromPoint又需要parentwindow参数。那要如何获得一个对话框上灰化或隐藏的按钮的句柄呢?
- 如何得到本机的COM口数、以及其的编号
- 请问dialogue对话框程序可不可以加statusbar????急,在线等~~~
- 字节流转换
- 看看这些代码什么意思,从来没见过
- 菜单列表项
- 请教高手
- 如何实现根据下载任务实时显示下载进度条指示
- 可执行文件执行时,如何获得它所处的目录?
- 有哪位知道何处有能够集成多个EXE文件的界面集成软件?谢谢。
- 详谈国军抗日阵亡将领名单四
用得了这么麻烦吗,用标准C函数就可以解决。
strcpy((LPCTSTR)ccc, (LPCTSTR)aaa);
strcat((LPCTSTR)ccc, (LPCTSTR)bbb);
CString &operator+(CMyString &str,CMyString &str1)
{
str=str+str1;
return str;
}//str为你要声明的CMyString对象的引用;
而你现在+号两边的是CMYString,所以还得重载一个
CMyString operator +( CMyString str1);
是这样的CString operator+(const CString& string1, const CString& string2)
{
CString s;
s.ConcatCopy(string1.GetData()->nDataLength, string1.m_pchData,
string2.GetData()->nDataLength, string2.m_pchData);
return s;
}那么既然你的mystring是继承于CString的那么
你把CString换成CMyString
写一个试试还有,这个函数是个友元
const CString& CString::operator=(const CString& stringSrc)
{
if (m_pchData != stringSrc.m_pchData)
{
if ((GetData()->nRefs < 0 && GetData() != _afxDataNil) ||
stringSrc.GetData()->nRefs < 0)
{
// actual copy necessary since one of the strings is locked
AssignCopy(stringSrc.GetData()->nDataLength, stringSrc.m_pchData);
}
else
{
// can just copy references around
Release();
ASSERT(stringSrc.GetData() != _afxDataNil);
m_pchData = stringSrc.m_pchData;
InterlockedIncrement(&GetData()->nRefs);
}
}
return *this;
}这是CString的operator,你一样可以改一下拿来用但问题是既然你的类是继承了CString的,那么一定有你自己新定义的类成员
比如一个int 型的int a
那么在你operator+和operator=的时候,是不是也考虑也做一些相应的操作,把这个成员也进行+和赋值操作!
我的派生类
CMyString aa("dddd"),bb("ffff");
aa="aaa"+bb;
这样会出现错误 :
error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class CString' (or there is no acceptable conversion)
请问各位怎么办呢
如果aa="aaa"+bb;//就会显示上面的错误。
还有我这个类如果做好了 我想在其它程序用 问什么是必须加入工程才可以用 不可以象#INCLDUE“”
这个样子吗?
是不是必须写如DLL才可以再其它的类里面调用啊~~
谢谢~~~
定义这个类的头文件得加入你的工程
比如你这个可能是MyString.h要包含进去不一定非要dll,只要你如果你这个工程包含这个类可以用的
但是如果你要多个工程都要用到这个类,那么用dll就比较好了至于那个错误
你定义了CMyString(char *p)或者CMyString(const char *p)
这样的构造函数了吗??
{
ASSERT(lpsz == NULL || AfxIsValidString(lpsz));
CString s;
s.ConcatCopy(string.GetData()->nDataLength, string.m_pchData,
CString::SafeStrlen(lpsz), lpsz);
return s;
}CString operator+(LPCTSTR lpsz, const CString& string)
{
ASSERT(lpsz == NULL || AfxIsValidString(lpsz));
CString s;
s.ConcatCopy(CString::SafeStrlen(lpsz), lpsz, string.GetData()->nDataLength,
string.m_pchData);
return s;
}老规矩,把CString换成CMyString