由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - Overridden function will cause function shadow in C++, but not in Java
相关主题
请问c++为什么会编译失败?C++格式输出
有个SB interviewer和我说++i比i++好 (转载)c++ 中如何把str转换为float?
问个指针array 的简单问题two general C++ question
[合集] 一道C++面试题 (转载)问一个C++下的Bug(Linux下)
很不习惯cin/cout[合集] 这段C++程序哪种写法是正确的
C/C++函数调用和栈内存G++用-g和-O3编译运行结果竟然不一样
谁来解释一下这个是compiler问题吗?question on divide by zero
a C++ interview question..........A helloworld OpenMP question?
相关话题的讨论汇总
话题: java话题: shadow话题: c++话题: virtual话题: function
进入Programming版参与讨论
1 (共1页)
n**d
发帖数: 9764
1
tried 2 small code in both. It seems I am RIGHT.
s***e
发帖数: 122
2
你得先理解virtual,Java里面的函数都是virtual的。

【在 n**d 的大作中提到】
: tried 2 small code in both. It seems I am RIGHT.
n**d
发帖数: 9764
3
more detail, please!

【在 s***e 的大作中提到】
: 你得先理解virtual,Java里面的函数都是virtual的。
n**d
发帖数: 9764
4
more detail, please!

【在 s***e 的大作中提到】
: 你得先理解virtual,Java里面的函数都是virtual的。
g*****g
发帖数: 34805
5
functions in C++ are non-virtual by default,
non-static methods in Java can only be virtual.

【在 n**d 的大作中提到】
: more detail, please!
n**d
发帖数: 9764
6
how does it associate to "shadow"

【在 g*****g 的大作中提到】
: functions in C++ are non-virtual by default,
: non-static methods in Java can only be virtual.

s***e
发帖数: 122
7
为了实现多态,C++里增加了virtual这么一个关键字来修饰类的成员函数。
如果一个成员函数是virtual的,那么当你通过一个对象调用它的时候,无论你用的指
针是基类还是子类,都会调到这个对象的实际类型所实现的这个函数。
你可以跑一下下面这个程序看看virtual和非virtual的区别,然后你就知道shadow为什
么和virtual这么相关了。
#include
class A {
public :
void f() { printf("A::f()\n"); };
virtual void g() { printf ("A::g()\n"); }
};

class B : public A {
public:
void f() { printf("B::f()\n"); }
virtual void g() { printf("B::g()\n"); }
};

void main() {
B b;
A* a = &b;
a->f();
a->g(

【在 n**d 的大作中提到】
: how does it associate to "shadow"
n**d
发帖数: 9764
8
Thanks for your code. It is the basic example for polymorphic. Run it but
still don't get hint for shadow.

【在 s***e 的大作中提到】
: 为了实现多态,C++里增加了virtual这么一个关键字来修饰类的成员函数。
: 如果一个成员函数是virtual的,那么当你通过一个对象调用它的时候,无论你用的指
: 针是基类还是子类,都会调到这个对象的实际类型所实现的这个函数。
: 你可以跑一下下面这个程序看看virtual和非virtual的区别,然后你就知道shadow为什
: 么和virtual这么相关了。
: #include
: class A {
: public :
: void f() { printf("A::f()\n"); };
: virtual void g() { printf ("A::g()\n"); }

n**d
发帖数: 9764
9
Make it more clear. Polymorphism may be able to explain why there is no
shadow issue in Java.
If it is true (no shadow), Java suggests it is not necessary to shadow other
overloading methods by overriding. I don't think it is an implement issue,
but a design one in language level. At least, some people do not agree C++'s
solution.

【在 n**d 的大作中提到】
: Thanks for your code. It is the basic example for polymorphic. Run it but
: still don't get hint for shadow.

s***e
发帖数: 122
10
C++引入virtual这个关键字就是为了实现polymorphism的。Java呢,take a step
further,认为所有非static的方法都应该是virtual,也就是都应该是可以实现
polymorphism的,所以干脆也就不要virtual这个关键字。
两种语言各有各的背景,各有各的用处。我们只需要把它们用于解决它们适合解决的问
题就行了。Java是在C++的基础上产生的,所以要更加OO一些,这很正常。比较它们来
发现它们各自的优缺点当然好,但是如果比较只是为了发现贬低某种语言就不好玩了。
你说的shadow,我希望我没有理解错,就是:调用同一个对象的同一个方法,如果用不
同类型class的引用/指针,会产生不同的结果。

other
,
's

【在 n**d 的大作中提到】
: Make it more clear. Polymorphism may be able to explain why there is no
: shadow issue in Java.
: If it is true (no shadow), Java suggests it is not necessary to shadow other
: overloading methods by overriding. I don't think it is an implement issue,
: but a design one in language level. At least, some people do not agree C++'s
: solution.

n**d
发帖数: 9764
11
Sorry, my mistake. Here is my "shadow" meaning.
overidden one method will HIDE all the version of overloading methods in the
base class.
class a
{
int f();
int f(int i);
}
class b : a
{
int f();
}
b.f() will hide both a.f() and a.f(int).

【在 s***e 的大作中提到】
: C++引入virtual这个关键字就是为了实现polymorphism的。Java呢,take a step
: further,认为所有非static的方法都应该是virtual,也就是都应该是可以实现
: polymorphism的,所以干脆也就不要virtual这个关键字。
: 两种语言各有各的背景,各有各的用处。我们只需要把它们用于解决它们适合解决的问
: 题就行了。Java是在C++的基础上产生的,所以要更加OO一些,这很正常。比较它们来
: 发现它们各自的优缺点当然好,但是如果比较只是为了发现贬低某种语言就不好玩了。
: 你说的shadow,我希望我没有理解错,就是:调用同一个对象的同一个方法,如果用不
: 同类型class的引用/指针,会产生不同的结果。
:
: other

1 (共1页)
进入Programming版参与讨论
相关主题
A helloworld OpenMP question?很不习惯cin/cout
大家帮我看看这个C程序为什么出错了C/C++函数调用和栈内存
请教一道C语言的题目谁来解释一下这个是compiler问题吗?
10个数所有的组对可能, 怎么解?a C++ interview question..........
请问c++为什么会编译失败?C++格式输出
有个SB interviewer和我说++i比i++好 (转载)c++ 中如何把str转换为float?
问个指针array 的简单问题two general C++ question
[合集] 一道C++面试题 (转载)问一个C++下的Bug(Linux下)
相关话题的讨论汇总
话题: java话题: shadow话题: c++话题: virtual话题: function