Opcjonalne parametry funkcji a dziedziczenie

0

Mam klasę A gdzie c jest parametrem opcjonalnym o domyślnej wartości równej 5.

class A
{
public int Fun(int a, int b, int c = 5)
{
return a + b * c;
}
}

Oraz klasę B

class B
{
// jakieś inne funkcje, żadna funkcja z klasy A nie jest przeładowywana (przeciążana)
}

Problem polega na tym, że w klasie B funkcja Fun nie ma zdefiniowanego parametru opcjonalnego, np.

var a = new A();
Console.WriteLine(a.Fun(1, 2)); // nie ma błędu

var b = new B();
Console.WriteLine(b.Fun(1, 2)); // jest błąd, kompilator domaga się podania trzeciego parametru c

O co chodzi? Dlaczego w drugim przypadku muszę podać parametr opcjonalny?

1

Nie dziedziczysz na razie. Daj:

class B:A
0

To + to (szczegolnie sekcja o inheritance) z grubsza wyjasnia dlaczego.

W klasie A masz jedna metode o sygnaturze Fun(int a, int b, int c), podstawienie wartosci domyslnej nastepuje w miejscu wywolania czyli w czasie kompilacji kompilator zamienia Console.WriteLine(a.Fun(1, 2)); na Console.WriteLine(a.Fun(1, 2, 5));.

W klasie B tez masz te sama, jedna, metode Fun(int a, int b, int c) tylko tu juz kompilator nic nie wie o domyslnej wartosci wiec wymaga podania wartosci w wywolaniu.

0
Trzeźwy Samiec napisał(a):
class B
{
// jakieś inne funkcje, żadna funkcja z klasy A nie jest przeładowywana (przeciążana)
}

Btw. przeladowanie (overloading) i przeciazenie (overriding) to dwie zupelnie rozne rzeczy

0
Anonymous13 napisał(a):
Trzeźwy Samiec napisał(a):
class B
{
// jakieś inne funkcje, żadna funkcja z klasy A nie jest przeładowywana (przeciążana)
}

Btw. przeladowanie (overloading) i przeciazenie (overriding) to dwie zupelnie rozne rzeczy

Overriding to nadpisywanie metod: https://pl.wikipedia.org/wiki/Nadpisywanie_metod

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0