Dziedziczenie i przeładowanie

0

mam klasę A w której jest funkcja f klasa B dziedziczy po A a C po B

w klasie C też jest funkcja f ale z innymi parametrami f w A ma parametr
domniemany int a f w

C ma pierwszy parametr NIE domniemany wskaźnik do A a drugi domniemany int

dlaczego jeśli wywołuje na rzecz obiektu klasy C f z intem to mi
wypisało że nie może dokonać konwersji

int na *A ?

wszystko jest public i dziedziczenie i elementy

używam kompilatora gcc

#include <iostream>

using namespace std;
class A{
public:
    void f(int a=0);
};
class B:public A{

};
class C:public B{
public:
    void f(A*wk,int a=0);
};

int main()
{
    cout << "Hello" << endl;
    A a;
    C c;
    c.f(10);//tu kompilator oznajmia błąd
    return 0;
}
void A::f(int a)
{
    cout<<"funkcja f z klasy A"<<endl;
}
void C::f(A *wk, int a)
{
    cout<<"funkcja f z klasy C"<<endl;
} 
3

Metoda f z klasy C przykrywa medotę f klasy A.
Rozwiązanie to użycie using A::f; w klasie C, np.

#include <iostream>
using namespace std;
 
struct A {
	void f (int value = 0) { cout << "A::f(int)\n"; }
};
 
struct B : public A {
	using A::f;
	void f(A* a, int value = 0) { cout << "B::f(A*, int)\n";  }
};
 
int main() {
	A a;
	B b;
	b.f(5); // tutaj zostanie wywołana metoda A::f(int)
	b.f(&a); // a tutaj metoda B::f(A*, int);
	return 0;
}
 

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