Code:
using System;
public class A {
public virtual void print() {
Console.WriteLine("A.print()");
}
}
public class B : A {
public virtual new void print() {
Console.WriteLine("B.print()");
}
}
public class C : B {
public override void print() {
Console.WriteLine("C.print()");
}
}
public class Test {
public static void Main() {
A a = new C();
a.print();
B b = new C();
b.print();
}
}
using System;
public class A {
public virtual void print() {
Console.WriteLine("A.print()");
}
}
public class B : A {
public virtual new void print() {
Console.WriteLine("B.print()");
}
}
public class C : B {
public override void print() {
Console.WriteLine("C.print()");
}
}
public class Test {
public static void Main() {
A a = new C();
a.print();
B b = new C();
b.print();
}
}
Ocekujem da se pri pozivu a.print() & b.print() pozove override-ovani print() metod iz C klase.
Medjutim, a.print() to ne radi.
Zasto gore navedeni kod nema istu funkcionalnost kao sledece u C++-u:
Code:
#include <iostream>
using namespace std;
class A {
public:
virtual void print() {
cout << "A.print()" << endl;
}
};
class B : A {
public:
virtual void print() {
cout << "B.print()" << endl;
}
};
class C : B {
public:
void print() {
cout << "C.print()" << endl;
}
};
int main() {
A *a = (A*)new C();
B *b = (B*)new C();
a->print();
b->print();
return 0;
}
#include <iostream>
using namespace std;
class A {
public:
virtual void print() {
cout << "A.print()" << endl;
}
};
class B : A {
public:
virtual void print() {
cout << "B.print()" << endl;
}
};
class C : B {
public:
void print() {
cout << "C.print()" << endl;
}
};
int main() {
A *a = (A*)new C();
B *b = (B*)new C();
a->print();
b->print();
return 0;
}