SGyves
asked on
Operator overloading required
I have a class that I derived from CObject...and the strangest thing is happening. There are no dynamic members...yet the compiler insists that I must overload an operator for any operation I want to do with it. Usually....the compiler defaults to a member-by-member copy constructor...however..thi s one does not. What is different about this class??
class CUserProfile : public CObject
{
DECLARE_SERIAL(CUserProfil e)
public:
CUserProfile();
CUserProfile(CUserProfile* cp);
virtual ~CUserProfile();
virtual void Serialize(CArchive& ar);
private:
//User Profile
CString m_sFullName;
CString m_sEMailAddress;
CString m_sNick;
CString m_sAltNick;
CString m_sPassword;
bool m_bInvisible;
bool m_bUsePassword;
//Connection Options
int m_nRetrys;
//Display Options
bool m_bPartJoin;
bool m_bQuit;
bool m_bColors;
bool m_bShowUnknowns;
//DCC Options
int m_nPacketSize;
bool m_bFillFileSpaces;
bool m_bFastSend;
bool m_bResume;
bool m_bWarnAccept;
CString m_sGetFolder;
CString m_sSharedFolder;
public:
bool SetNick(CString n);
bool SetAlternateNick(CString an);
void SetRealName(CString rn);
void SetEmail(CString em);
void SetPassword(CString p);
void SetInvisible(bool i);
void SetRetryCount(int rc);
void SetShowJoinPart(bool jp);
void SetShowUnknownMsgs(bool um);
void SetShowColors(bool sc);
void SetShowQuits(bool sq);
void SetPacketSize(int ps);
void SetFillSpaces(bool fs);
void SetFastSend(bool fs);
void SetResumeOnExist(bool roe);
void SetWarnOnAccept(bool woa);
void SetGetFolder(CString gf);
CString GetNick(void);
CString GetAltNick(void);
CString GetRealName(void);
CString GetEmail(void);
bool GetInvisibleMode(void);
CString GetPassword(void);
int GetRetryCount(void);
bool GetShowJoinPart(void);
bool GetShowUnknown(void);
bool GetShowColors(void);
bool GetShowQuits(void);
int GetPacketSize(void);
bool GetFillFileSpaces(void);
bool GetFastSend(void);
bool GetResumeOnExist(void);
bool GetWarnOnAcceptSend(void);
CString GetSendFolder(void);
//CUserProfile operator=();
bool GetUsePassword(void);
void SetUsePassword(bool up);
};
class CUserProfile : public CObject
{
DECLARE_SERIAL(CUserProfil
public:
CUserProfile();
CUserProfile(CUserProfile*
virtual ~CUserProfile();
virtual void Serialize(CArchive& ar);
private:
//User Profile
CString m_sFullName;
CString m_sEMailAddress;
CString m_sNick;
CString m_sAltNick;
CString m_sPassword;
bool m_bInvisible;
bool m_bUsePassword;
//Connection Options
int m_nRetrys;
//Display Options
bool m_bPartJoin;
bool m_bQuit;
bool m_bColors;
bool m_bShowUnknowns;
//DCC Options
int m_nPacketSize;
bool m_bFillFileSpaces;
bool m_bFastSend;
bool m_bResume;
bool m_bWarnAccept;
CString m_sGetFolder;
CString m_sSharedFolder;
public:
bool SetNick(CString n);
bool SetAlternateNick(CString an);
void SetRealName(CString rn);
void SetEmail(CString em);
void SetPassword(CString p);
void SetInvisible(bool i);
void SetRetryCount(int rc);
void SetShowJoinPart(bool jp);
void SetShowUnknownMsgs(bool um);
void SetShowColors(bool sc);
void SetShowQuits(bool sq);
void SetPacketSize(int ps);
void SetFillSpaces(bool fs);
void SetFastSend(bool fs);
void SetResumeOnExist(bool roe);
void SetWarnOnAccept(bool woa);
void SetGetFolder(CString gf);
CString GetNick(void);
CString GetAltNick(void);
CString GetRealName(void);
CString GetEmail(void);
bool GetInvisibleMode(void);
CString GetPassword(void);
int GetRetryCount(void);
bool GetShowJoinPart(void);
bool GetShowUnknown(void);
bool GetShowColors(void);
bool GetShowQuits(void);
int GetPacketSize(void);
bool GetFillFileSpaces(void);
bool GetFastSend(void);
bool GetResumeOnExist(void);
bool GetWarnOnAcceptSend(void);
CString GetSendFolder(void);
//CUserProfile operator=();
bool GetUsePassword(void);
void SetUsePassword(bool up);
};
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
This is from AFX.h
// Disable the copy constructor and assignment by default so you will get
// compiler errors instead of unexpected behaviour if you pass objects
// by value or assign objects.
protected:
CObject();
private:
CObject(const CObject& objectSrc); // no implementation
void operator=(const CObject& objectSrc); // no implementation
So this behaviour is by design.. :)
// Disable the copy constructor and assignment by default so you will get
// compiler errors instead of unexpected behaviour if you pass objects
// by value or assign objects.
protected:
CObject();
private:
CObject(const CObject& objectSrc); // no implementation
void operator=(const CObject& objectSrc); // no implementation
So this behaviour is by design.. :)
>>So this behaviour is by design.. :)
You are right, but it does not say one can't override it :o)
You are right, but it does not say one can't override it :o)
ASKER
Ok...just wondering why this object suddenly started making me overload assignment and copy. Thank you for the explanation. :)
>>just wondering why this object suddenly started making me overload assignment and cop
It became too complex for the compiler to handle - and, I actually would recommend implementing these *always*, as a matter of "taste" :o)
It became too complex for the compiler to handle - and, I actually would recommend implementing these *always*, as a matter of "taste" :o)
ASKER
Yes...yes...I know...it is proper practice to always overload the copy and assignment. Ahhh...so hard not to be lazy. I agree though.
jkr,
I did not say you cannot override it either! SGyves was wondering why CObject would force him to write an overloaded = operator and tried to answer to the point.
I did not say you cannot override it either! SGyves was wondering why CObject would force him to write an overloaded = operator and tried to answer to the point.
ASKER
I understood Priyesh....no worries.
ASKER