被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。

ocean1002 2014-10-09 03:58:35
http://blog.csdn.net/ericbaner/article/details/3857268
这篇文章里看到的。
这话对吗?

http://bbs.csdn.net/topics/100009936
百度了一下,这个帖子里又说是重写。

...全文
350 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
勤奋的小游侠 2014-10-10
  • 打赏
  • 举报
回复
引用 2 楼 ocean1002 的回复:
[quote=引用 1 楼 lovesmiles 的回复:] 你没有发现一个帖子说的是JAVA,一个帖子说的是C++吗?
你的意思是C++重写如果是private的话是新定义,JAVA的话不是新定义? 我实验了下,VC下C++重写如果是private的话,貌似不是新定义。[/quote] 你自己对重写的理解是怎么样的?新定义是什么意思? VC下C++重写如果是private的话,貌似不是新定义 你这句话是什么意思?
ocean1002 2014-10-10
  • 打赏
  • 举报
回复
引用 5 楼 lovesmiles 的回复:
[quote=引用 2 楼 ocean1002 的回复:] [quote=引用 1 楼 lovesmiles 的回复:] 你没有发现一个帖子说的是JAVA,一个帖子说的是C++吗?
你的意思是C++重写如果是private的话是新定义,JAVA的话不是新定义? 我实验了下,VC下C++重写如果是private的话,貌似不是新定义。[/quote] 你没有看到第二个帖子加了个virtal虚函数关键字吗?这个已经是c++中的多态了。[/quote] 我没明白你的回答我的提问有什么关系?
ocean1002 2014-10-10
  • 打赏
  • 举报
回复
引用 4 楼 Idle_ 的回复:
public, protected, private关键字只是表示本类中这些member是否对外界可见,在子类中定义一个private的父类同名public方法只是表示在子类对象中父类的该方法不可见,但是还是可以通过子类对象的父类指针访问到,这和overriding完全是两回事
class CBase { public: virtual void VFunc1(){} } class CDerived : public CBase { private: virtual void VFunc1(){} } “在子类中定义一个private的父类同名public方法只是表示在子类对象中父类的该方法不可见”:CDerived::VFunc1不可见。 "但是还是可以通过子类对象的父类指针访问到":CDerived::CBase::VFunc1访问到。 "这和overriding完全是两回事" 我没明白你的回答我的提问有什么关系?
阿呆_ 2014-10-10
  • 打赏
  • 举报
回复
引用 6 楼 ocean1002 的回复:
[quote=引用 4 楼 Idle_ 的回复:] public, protected, private关键字只是表示本类中这些member是否对外界可见,在子类中定义一个private的父类同名public方法只是表示在子类对象中父类的该方法不可见,但是还是可以通过子类对象的父类指针访问到,这和overriding完全是两回事
class CBase { public: virtual void VFunc1(){} } class CDerived : public CBase { private: virtual void VFunc1(){} } “在子类中定义一个private的父类同名public方法只是表示在子类对象中父类的该方法不可见”:CDerived::VFunc1不可见。 "但是还是可以通过子类对象的父类指针访问到":CDerived::CBase::VFunc1访问到。 "这和overriding完全是两回事" 我没明白你的回答我的提问有什么关系? [/quote] class CBase { public: virtual void VFunc1(){} } class CDerived : public CBase { private: virtual void VFunc1(){} } int main() { CDerived d; d.VFunc1() <-- error static_cast<CBase*>(&d)->VFunc1() <-- OK, but actually called CDerived::VFunc1(), this is called overriding } 那么这个overriding和不能调用d.VFunc1()有关系吗? 这完全是由于CDerived::VFunc1()是private造成的。
ocean1002 2014-10-10
  • 打赏
  • 举报
回复
引用 8 楼 lovesmiles 的回复:
[quote=引用 2 楼 ocean1002 的回复:] [quote=引用 1 楼 lovesmiles 的回复:] 你没有发现一个帖子说的是JAVA,一个帖子说的是C++吗?
你的意思是C++重写如果是private的话是新定义,JAVA的话不是新定义? 我实验了下,VC下C++重写如果是private的话,貌似不是新定义。[/quote] 你自己对重写的理解是怎么样的?新定义是什么意思? VC下C++重写如果是private的话,貌似不是新定义 你这句话是什么意思? [/quote] http://blog.csdn.net/ericbaner/article/details/3857268 5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。 按照这句话的意思,重写和新定义是两种不同的东西。 按照你的逻辑,新定义其实就是重写?
勤奋的小游侠 2014-10-09
  • 打赏
  • 举报
回复
引用 2 楼 ocean1002 的回复:
[quote=引用 1 楼 lovesmiles 的回复:] 你没有发现一个帖子说的是JAVA,一个帖子说的是C++吗?
你的意思是C++重写如果是private的话是新定义,JAVA的话不是新定义? 我实验了下,VC下C++重写如果是private的话,貌似不是新定义。[/quote] 你没有看到第二个帖子加了个virtal虚函数关键字吗?这个已经是c++中的多态了。
阿呆_ 2014-10-09
  • 打赏
  • 举报
回复
public, protected, private关键字只是表示本类中这些member是否对外界可见,在子类中定义一个private的父类同名public方法只是表示在子类对象中父类的该方法不可见,但是还是可以通过子类对象的父类指针访问到,这和overriding完全是两回事
ocean1002 2014-10-09
  • 打赏
  • 举报
回复
引用 2 楼 ocean1002 的回复:
[quote=引用 1 楼 lovesmiles 的回复:] 你没有发现一个帖子说的是JAVA,一个帖子说的是C++吗?
你的意思是C++重写如果是private的话是新定义,JAVA的话不是新定义? 我实验了下,VC下C++重写如果是private的话,貌似不是新定义。[/quote] 上面说反了。。。。 JAVA重写如果是private的话是新定义?
ocean1002 2014-10-09
  • 打赏
  • 举报
回复
引用 1 楼 lovesmiles 的回复:
你没有发现一个帖子说的是JAVA,一个帖子说的是C++吗?
你的意思是C++重写如果是private的话是新定义,JAVA的话不是新定义? 我实验了下,VC下C++重写如果是private的话,貌似不是新定义。
勤奋的小游侠 2014-10-09
  • 打赏
  • 举报
回复
你没有发现一个帖子说的是JAVA,一个帖子说的是C++吗?

65,176

社区成员

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

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