n**d 发帖数: 9764 | 1 tried 2 small code in both. It seems I am RIGHT. |
s***e 发帖数: 122 | 2 你得先理解virtual,Java里面的函数都是virtual的。
【在 n**d 的大作中提到】![](/moin_static193/solenoid/img/up.png) : tried 2 small code in both. It seems I am RIGHT.
|
n**d 发帖数: 9764 | 3 more detail, please!
【在 s***e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你得先理解virtual,Java里面的函数都是virtual的。
|
n**d 发帖数: 9764 | 4 more detail, please!
【在 s***e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你得先理解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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : more detail, please!
|
n**d 发帖数: 9764 | 6 how does it associate to "shadow"
【在 g*****g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 为了实现多态,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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : C++引入virtual这个关键字就是为了实现polymorphism的。Java呢,take a step : further,认为所有非static的方法都应该是virtual,也就是都应该是可以实现 : polymorphism的,所以干脆也就不要virtual这个关键字。 : 两种语言各有各的背景,各有各的用处。我们只需要把它们用于解决它们适合解决的问 : 题就行了。Java是在C++的基础上产生的,所以要更加OO一些,这很正常。比较它们来 : 发现它们各自的优缺点当然好,但是如果比较只是为了发现贬低某种语言就不好玩了。 : 你说的shadow,我希望我没有理解错,就是:调用同一个对象的同一个方法,如果用不 : 同类型class的引用/指针,会产生不同的结果。 : : other
|