一个小问题,简单

quietstar 2005-09-13 11:01:24
#include "stdio.h"
class CBase
{
public:
CBase(){m_iValue=0;}
CBase& operator =(int v)
{
m_iValue=v;
return *this;
}
int Get_iValue()const
{ return m_iValue;}
void Set_iValue(int v)
{ m_iValue=v; }

private:
int m_iValue;
};
class CSon :public CBase
{
public:
CSon(){m_fValue=0.0;}
CSon& operator =(const CSon& son)
{
CBase::operator=(son);//??????????????????????????????????
m_fValue=son.m_fValue;
return *this;
}
float Get_fValue()const
{ return m_fValue;}
void Set_fValue(float v)
{
m_fValue=v;
}
private:
float m_fValue;
};

int main(int argc, char* argv[])
{
CSon son1,son2;

//son2=34;
//son2.operator =(34);

son2.CBase::operator =(34);
son2.Set_fValue((float)21.33);
son1=son2;
printf("%8.2f %d\n",son1.Get_fValue(),son1.Get_iValue());
return 0;
}

请问上面的程序打问号的地方,CBase重载=好不是要求参数是int型码?为什么可以是CSon类型呢,多谢!
程序经过我编译可以运行















...全文
226 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
adsfdda 2005-09-14
  • 打赏
  • 举报
回复
运算符重载是为了让运算符能够直接处理类。
调用的时候不是那个样子的。
建议去看看书先。
quietstar 2005-09-14
  • 打赏
  • 举报
回复
楼上的,在那里有这个问题的答案,可以把地址告诉我吗?
zhouhuahai 2005-09-14
  • 打赏
  • 举报
回复
这个问题上次晨星老大不是回答了么?
quietstar 2005-09-14
  • 打赏
  • 举报
回复
楼上的,我知道这样写可以调用,问题是?号的那个地方是不是像viewpl所说的那样.
llf_hust 2005-09-13
  • 打赏
  • 举报
回复
#include "stdio.h"
#include<iostream.h>
class CBase
{
public:
CBase()
{
m_iValue=0;
}
CBase& operator =(int v)
{
m_iValue=v;
return *this;
}
int Get_iValue()const
{
return m_iValue;
}
void Set_iValue(int v)
{
m_iValue=v;
}

public:
int m_iValue;
};

class CSon :public CBase
{
public:
CSon()
{
m_fValue=0.0;
}
CSon& operator =(const CSon& son)
{
CBase::operator=(son.m_iValue);//??????????????????????????????????
m_fValue=son.m_fValue;
return *this;
}
float Get_fValue()const
{
return m_fValue;
}
void Set_fValue(float v)
{
m_fValue=v;
}
private:
float m_fValue;
};

int main(int argc, char* argv[])
{
CSon son1,son2;



son2.CBase::operator =(34);
son2.Set_fValue((float)21.33);
son1=son2;
printf("%8.2f %d\n",son1.Get_fValue(),son1.Get_iValue());
return 0;
}
//这样写才会调用
viewpl 2005-09-13
  • 打赏
  • 举报
回复
一般编译器会为一个类默认制作一些函数,其中包括构造函数,析构函数,拷贝构造函数和赋值函数
viewpl 2005-09-13
  • 打赏
  • 举报
回复
这是因为它并没有调用你写的CBase& operator =(int v),而是编译器默认的CBase的operator =

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧