Napisałem taki prosty kod dotyczący dziedziczenia:
#include
using namespace std;
class a
{
public:
void wyswietl1()
{
cout << "Napis z klasy bazowej :)" << endl << endl;
}
};
class b : public a
{
public:
void wyswietl2()
{
cout << "Napis z klasy pochodnej :)" << endl << endl;
}
};
int main()
{
a *wsk = new b;
wsk->wyswietl1();
wsk->wyswietl2();
system("pause");
return 0;
}
Ale podczas próby kompilacji wyskakują błędy dotyczące wywołania metody wyswietl2(), która znajduję się w klasie pochodnej:
1>.\inheritance.cpp(28) : error C2039: 'wyswietl2' : is not a member of 'a'
1> .\inheritance.cpp(6) : see declaration of 'a'
#include
using namespace std;
class a
{
public:
void wyswietl1()
{
cout << "Napis z klasy bazowej :)" << endl << endl;
}
};
class b : public a
{
public:
void wyswietl2()
{
cout << "Napis z klasy pochodnej :)" << endl << endl;
}
};
int main()
{
b wsk;
b *sk;
sk=&wsk;
sk->wyswietl1();
sk->wyswietl2();
system("pause");
return 0;
}
Przed tobą długa droga. Najpierw naucz się wskaźników. Z jakiego kursu korzystasz? – Dodane 11.02.2009 (Śr) 13:27 –
nie możesz tak zadeklarować bo a i b to dwa różne obiekty (mimo że b dziedziczy z a). to tak jak napisać int a = string b. kompilator tego nie przepuści. ponieważ to są dwa różne typy.
#include
using namespace std;
class a
{
public:
void wyswietl1() { cout << "Napis 1 z klasy bazowej :)" << endl << endl; }
virtual void wyswietl2() { cout << "Napis 2 z klasy bazowej :)" << endl << endl; }
};
class b:public a
{
public:
void wyswietl1() { cout << "Napis 1 z klasy pochodnej :)" << endl << endl; }
virtual void wyswietl2() { cout << "Napis 2 z klasy pochodnej :)" << endl << endl; } // tu virtual można pominąć
};
int main()
{
b B;
a *wsk=&B;
a &ref=B;
B.wyswietl1(); // Napis 1 z klasy pochodnej :)
wsk->wyswietl1(); // Napis 1 z klasy bazowej :)
ref.wyswietl1(); // Napis 1 z klasy bazowej :)
((b*)wsk)->wyswietl1(); // Napis 1 z klasy pochodnej :)
((b&)ref).wyswietl1(); // Napis 1 z klasy pochodnej :)
B.wyswietl2(); // Napis 2 z klasy pochodnej :)
wsk->wyswietl2(); // Napis 2 z klasy pochodnej :)
ref.wyswietl2(); // Napis 2 z klasy pochodnej :)
cin.get();
return 0;
}