向大家请教个关于c++的问提:
1. c++中的override是不是必须要用virtual 来实现? 2. 什么情况下子类的函数override父类的函数,什么情况下覆盖父类的函数?
在网上搜了一圈,说各种答案的都有,查了c++ primer也不知所以,希望哪位高手可以帮忙解答一下,万分感谢~~
只要子类实现了相同 signature 的函数,就是覆盖(override)了父类的函数。只是如果父类的对应的函数没有声明为 virtual 就无法实现多态 (polymorphism)
2012/6/6 Ying Chen justin.nankai@gmail.com
向大家请教个关于c++的问提:
- c++中的override是不是必须要用virtual 来实现?
- 什么情况下子类的函数override父类的函数,什么情况下覆盖父类的函数?
在网上搜了一圈,说各种答案的都有,查了c++ primer也不知所以,希望哪位高手可以帮忙解答一下,万分感谢~~
Fedora中文郵件列表:https://admin.fedoraproject.org/mailman/listinfo/chinese
谢谢!原来override是翻译为覆盖,我把‘覆盖’和‘隐藏’混淆了。那如果父类函数声明了virtual,但子类函数的input argumetns不一样,这时候是override父类函数还是隐藏父类函数?
2012/6/6 Robin Lee robinlee.sysu@gmail.com
只要子类实现了相同 signature 的函数,就是覆盖(override)了父类的函数。只是如果父类的对应的函数没有声明为 virtual 就无法实现多态 (polymorphism)
2012/6/6 Ying Chen justin.nankai@gmail.com
向大家请教个关于c++的问提:
- c++中的override是不是必须要用virtual 来实现?
- 什么情况下子类的函数override父类的函数,什么情况下覆盖父类的函数?
在网上搜了一圈,说各种答案的都有,查了c++ primer也不知所以,希望哪位高手可以帮忙解答一下,万分感谢~~
Fedora中文�件列表:https://admin.fedoraproject.org/mailman/listinfo/chinese
-- Fedora中文�件列表:https://admin.fedoraproject.org/mailman/listinfo/chinese
在 C++ 里,函数名相同但输入参数不相同就是不同的函数
2012/6/6 Ying Chen justin.nankai@gmail.com
谢谢!原来override是翻译为覆盖,我把‘覆盖’和‘隐藏’混淆了。那如果父类函数声明了virtual,但子类函数的input argumetns不一样,这时候是override父类函数还是隐藏父类函数?
2012/6/6 Robin Lee robinlee.sysu@gmail.com
只要子类实现了相同 signature 的函数,就是覆盖(override)了父类的函数。只是如果父类的对应的函数没有声明为 virtual 就无法实现多态 (polymorphism)
2012/6/6 Ying Chen justin.nankai@gmail.com
向大家请教个关于c++的问提:
- c++中的override是不是必须要用virtual 来实现?
- 什么情况下子类的函数override父类的函数,什么情况下覆盖父类的函数?
在网上搜了一圈,说各种答案的都有,查了c++ primer也不知所以,希望哪位高手可以帮忙解答一下,万分感谢~~
Fedora中文郵件列表:https://admin.fedoraproject.org/mailman/listinfo/chinese
-- Fedora中文郵件列表:https://admin.fedoraproject.org/mailman/listinfo/chinese
-- Fedora中文郵件列表:https://admin.fedoraproject.org/mailman/listinfo/chinese
谢谢!
2012/6/6 Robin Lee robinlee.sysu@gmail.com
在 C++ 里,函数名相同但输入参数不相同就是不同的函数
2012/6/6 Ying Chen justin.nankai@gmail.com
谢谢!原来override是翻译为覆盖,我把‘覆盖’和‘隐藏’混淆了。那如果父类函数声明了virtual,但子类函数的input argumetns不一样,这时候是override父类函数还是隐藏父类函数?
2012/6/6 Robin Lee robinlee.sysu@gmail.com
只要子类实现了相同 signature 的函数,就是覆盖(override)了父类的函数。只是如果父类的对应的函数没有声明为 virtual 就无法实现多态 (polymorphism)
2012/6/6 Ying Chen justin.nankai@gmail.com
向大家请教个关于c++的问提:
- c++中的override是不是必须要用virtual 来实现?
- 什么情况下子类的函数override父类的函数,什么情况下覆盖父类的函数?
在网上搜了一圈,说各种答案的都有,查了c++ primer也不知所以,希望哪位高手可以帮忙解答一下,万分感谢~~
Fedora中文�件列表:
https://admin.fedoraproject.org/mailman/listinfo/chinese
-- Fedora中文�件列表:https://admin.fedoraproject.org/mailman/listinfo/chinese
-- Fedora中文�件列表:https://admin.fedoraproject.org/mailman/listinfo/chinese
-- Fedora中文�件列表:https://admin.fedoraproject.org/mailman/listinfo/chinese
2012/6/6 Robin Lee robinlee.sysu@gmail.com
只要子类实现了相同 signature 的函数,就是覆盖(override)了父类的函数
hi, 这种表述是不准确的。 父类与子类的成员函数的 signature 相同,应该叫 redefine 重定义,而不是 override 覆盖。 父类与子类的成员函数的 signature 相同,且父类的成员函数为 virtual,才能称为 override 覆盖。
C++ 還眞是麻煩啊。這兩者在子類的使用上毫無區別,結果一類型轉換就亂了……
GObject 解释這個太容易了。。
重定義:只是在子類定義一個同名函數(除去前綴)。用父類的接口和子類的效果 不同。 覆盖:父類在 class 裏登記虚函數指針,子類在自己的 class_init 裏覆盖之, 不論使用父類的接口還是子類的,都不會亂了。
唉呀,是不是太麻煩了,說不定會吓跑 GObject 的潜在學習者呢。
於 日,2012-07-15 於 14:03 +0800,Zind 提到:
父类与子类的成员函数的 signature 相同,应该叫 redefine 重定义,而不是 override 覆盖。 父类与子类的成员函数的 signature 相同,且父类的成员函数为 virtual,才 能称为 override 覆盖。
也就是说 override 是 redefine 的特殊情况
2012/7/15 Zind wzmindlog@gmail.com
2012/6/6 Robin Lee robinlee.sysu@gmail.com
只要子类实现了相同 signature 的函数,就是覆盖(override)了父类的函数
hi, 这种表述是不准确的。 父类与子类的成员函数的 signature 相同,应该叫 redefine 重定义,而不是 override 覆盖。 父类与子类的成员函数的 signature 相同,且父类的成员函数为 virtual,才能称为 override 覆盖。
从我个人经验来看,这两者最大的区别就是在用父类的指针指向子类的对象的时候,override自动调用子类函数,但redefine调用父类函数。不知道还有其他区别吗?
2012/7/15 Zind wzmindlog@gmail.com
也就是说 override 是 redefine 的特殊情况
2012/7/15 Zind wzmindlog@gmail.com
2012/6/6 Robin Lee robinlee.sysu@gmail.com
只要子类实现了相同 signature 的函数,就是覆盖(override)了父类的函数
hi, 这种表述是不准确的。 父类与子类的成员函数的 signature 相同,应该叫 redefine 重定义,而不是 override 覆盖。 父类与子类的成员函数的 signature 相同,且父类的成员函数为 virtual,才能称为 override 覆盖。
-- Fedora中文�件列表:https://admin.fedoraproject.org/mailman/listinfo/chinese
从我个人经验来看,这两者最大的区别就是在用父类的指针指向子类的对 象的时候,override自动调用子类函数,但redefine调用父类函数。不知道 还有其他区别吗?
这个表述很到位啊。。。受教了。
Thanks --Yi Sun
2012/7/15 Zind wzmindlog@gmail.com
也就是说 override 是 redefine 的特殊情况
2012/7/15 Zind wzmindlog@gmail.com
2012/6/6 Robin Lee robinlee.sysu@gmail.com
只要子类实现了相同 signature 的函数,就是覆盖(override)了父类的
函数
hi, 这种表述是不准确的。 父类与子类的成员函数的 signature 相同,应该叫 redefine 重定义,
而不是 override 覆盖。
父类与子类的成员函数的 signature 相同,且父类的成员函数为
virtual,才能称为 override 覆盖。
-- Fedora中文�件列表:
chinese@lists.fedoraproject.org