mardi 27 janvier 2015

Which one should be considered as the righteous implementation for OOP

Here are same code for java,c#,c++ which demonstrate constructor call, inheritance and polymorphism


Java



class A{
A() {
print();
}
void print() { System.out.println("A"); }
}

public class TestJava extends A {
int i = 4;

public TestJava() {
super();
}

void print() {
System.out.println(i);
}
public static void main(String[] args) {
A a = new TestJava();
a.print();
}

}


Output: 0 4


C#



namespace CSharpTest
{
using System.IO;
using System;

class A
{
public A()
{
print();
}

public virtual void print()
{
Console.WriteLine("A");
}
}

class Program : A
{
int i = 4;

public override void print()
{
Console.WriteLine(i);
}

static void Main(string[] args)
{
A a = new Program();
a.print();
}
}
}


Output: 4 4


C++



class A{
public:
A() {
print();
}

virtual void print() {
fprintf(stderr, "A\n");
}
virtual ~A(){}
};

class B : public A {
public:
int i = 4;
virtual void print() {
fprintf(stderr, "%d\n", i);
}
};


int main(int argc, char** argv) {
A *a = new B;
a->print();
//.....
return 0;
}


Output A 4


As you see C++ and java/c# differs. Plus java and c# differs on initializing variable i.


C++ will call constructor of A and inside A's constructor it will call A's print


java /c# will call constructor A but inside A's constructor it will call B's print


c# will initalize i before calling A's constructor


Which one should be considered as the righteous implementation for OOP.


Aucun commentaire:

Enregistrer un commentaire