方法的重写与重载有什么区别

medex123 2012-04-12 10:42:31
方法的重写与重载有什么区别 ???最好给个简单的例子说明一下 空口说很难理解
...全文
322 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxinxin1128 2012-11-22
  • 打赏
  • 举报
回复
重写 就是派生类重新写了积累的属性 重载 就是在同一类里面写一个具有相同属性的
wangji666666 2012-04-12
  • 打赏
  • 举报
回复 1
[Quote=引用 5 楼 的回复:]
重写是把他换了
重载是给他加个兄弟
[/Quote]
很形象
全局变量 2012-04-12
  • 打赏
  • 举报
回复
重写是根据需求写方法体

重载是根据方法对应需求
threenewbee 2012-04-12
  • 打赏
  • 举报
回复
但是C++不但支持静态联编,还支持动态联编。
动态联编的实质是借助一个“虚函数表”,在程序运行的时候判断应该执行哪一个函数:
class A
{
public: virtual void foo(int x) { }
};
class B : public A
{
public: virtual void foo(int x) { }
};


A *p = new A();
p->foo(1);
delete p;
p = new B();
p->foo(1);
delete p;


所以就是在C++中,把函数重写说成重载也是不对的。
youzelin 2012-04-12
  • 打赏
  • 举报
回复
重写 是父类和子类之间的同名方法的一种关系
重载 是单个类内部的各种同名方法的一种关系

重写 的方法的签名必须完全一致
重载 的方法的签名可以不一致
threenewbee 2012-04-12
  • 打赏
  • 举报
回复
在C++时代,静态联编使得方法重写用到了方法重载,因为C++的一些编译器会将this指针作为参数传递给成员函数,而所谓的成员函数,其实就是普通的函数:
class A
{
public: void foo(int x) { }
};
class B : public A
{
public: void foo(int x) { }
};
其实得到这样两个普通函数:
void A(A * this, int x)
{
...
}
void B(B * this, int x)
{
...
}
如果从“重载”的角度看,它们就是同名不同类型的函数。

所以一些国内业余的C++书籍会混淆函数重写和函数重载。

但是从OO的角度看,它们没有什么联系。
cancerser 2012-04-12
  • 打赏
  • 举报
回复 1
重写是把他换了
重载是给他加个兄弟
cheng2005 2012-04-12
  • 打赏
  • 举报
回复
baidu 至少 100万个结果。
夜色镇歌 2012-04-12
  • 打赏
  • 举报
回复
~~~[Quote=引用 1 楼 的回复:]

没有联系的两个东西,谈何区别。
[/Quote]
bdmh 2012-04-12
  • 打赏
  • 举报
回复
重写 父类的方法,自己看多态
重载 同名 ,不同参数,如下
private void Add()
{
}
private void Add(int i,int j)
{
}
threenewbee 2012-04-12
  • 打赏
  • 举报
回复
没有联系的两个东西,谈何区别。
donet菜鸟 2012-04-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
你老爸教你一套长拳,你却你不想学 自己学了太极拳 这就是重写
你会 太极拳, 你兄弟会太极剑
打架用你的太极拳,杀人要用太极剑 都是(太极)方法 这就叫重载
[/Quote]

这比喻够强的
st200316 2012-04-12
  • 打赏
  • 举报
回复
重写 可以是完全的重写 也可以是扩展的重写
gaomicro 2012-04-12
  • 打赏
  • 举报
回复
呵呵,非常形象
[Quote=引用 5 楼 的回复:]
重写是把他换了
重载是给他加个兄弟
[/Quote]
st200316 2012-04-12
  • 打赏
  • 举报
回复
重写是把他换了 属于 基类和子类 之间的关系
重载是给他加个兄弟 属于一个类内的事情 也包含继承来的方法的重载
瑞卡哥哥 2012-04-12
  • 打赏
  • 举报
回复
你老爸教你一套长拳,你却你不想学 自己学了太极拳 这就是重写
你会 太极拳, 你兄弟会太极剑
打架用你的太极拳,杀人要用太极剑 都是(太极)方法 这就叫重载
ganendexin2010 2012-04-12
  • 打赏
  • 举报
回复
重载:不同参数类型或个数的方法进行的重复调用
重写:父类与子类的关系,子类继续父类的一些方法

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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