Portál AbcLinuxu, 13. května 2025 23:15
#include <iostream> using namespace std; class widget { public: virtual void set_text(){}; }; class button : public widget { public: void set_text(){cout << "settext button" < endl;}; }; class label : public widget { public: void set_text(){cout < "settext label" < endl;}; }; int main(int argc,char *argv[]) { widget *arr[2]; arr[0] = (widget *) new button(); arr[1] = (widget *) new label(); arr[0]->set_text(); arr[1]->set_text(); return 0; }
class A { public: virtual void f() { cout << "A" << endl; } }; class A1 : public A { public: virtual void f() { cout << "A1" << endl; } }; class A2 : public A { public: virtual void f() { cout << "A2" << endl; } }; A* p1 = new A1; A* p2 = new A2; p1->f(); p2->f();vypíše 'A1' a 'A2'. Kdyby ale ty metody nebyly virtuální, vypíše dvakrát 'A'.
class A { public: virtual void f(); }; void A::f() { cout << "A" << endl; }a analogicky i pro ty dvě dceřinné třídy.
2) Kontakt na mna je v linke na moje meno, ale a) nepovazujem sa za experta na c++, a b) nerucim za to ze odpoviem v rozumnej dobe
3) Tento server asi navstevuje vela programatorov, takze mozno dostanes odpovede aj tu, ale nie je to primarnym zameranim tohoto serveru. Mozno by bolo lepsie obratit sa na nejake usenet grupy (napr. comp.lang.c++)
class AbstractObject { public: virtual setText(QString *text) = 0; }A pak udělat specializace pro skutečné widgety:
class QButtonWrapper { QLabel *m_button; public: virtual setText(QString *text) { m_button->setText(text) }; }(konstruktor a destruktor je zřejmý) Tak vlastně doděláš to, na co se v návrhu toolkitu zapomnělo. Pozn. Ty třídy nejdou ani sloučit pomocí vícenásobné dědičnosti, protože mají společného předka. To se dá sice obejít virtuální dědičností, ale opět pokud to neudělal autor toolkitu, ty už s tím nic nenaděláš.
#include <iostream> using namespace std; class Otazka { public: virtual void ask() { cout << "Obecna Otazka" << endl; } }; class LinuxovaOtazka: public Otazka { public: virtual void ask() { cout << "Tato otazka patri na ABCLinuxu" << endl; } }; class JinaOtazka: public Otazka { public: virtual void ask() { cout << "Tato otazka sem nepatri" << endl; } }; int main() { Otazka* ot = new JinaOtazka; ot->ask(); return 0; }
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.