私は読んでいましたThe C++ Programming Language 3rd edition
。第15章(398ページ)では、小さな例を示しています。
class Window {
public:
virtual void draw() { //sth }
};
class Window_with_border : public virtual Window {
public:
void own_draw() { //sth }
void draw() {Window::draw(); own_draw();}
};
class Window_with_menu : public virtual Window {
public:
void own_draw() { //sth }
void draw() {Window::draw(); own_draw(); }
};
class Clock : public Window_with_border, public Window_with_menu {
public:
void own_draw() { //sth }
void draw() {Window::draw(); Window_with_border::draw(); Window_with_menu::draw(); own_draw(); }
};
そして、著者は述べているdraw()
機能は、現在使用して書き込むことができるown_draw()
いずれかの呼び出し側がそのような機能をdraw()
取得しますWindow::draw()
正確に一度だけ呼び出されます。
しかし、Clockオブジェクトを定義してdraw()を呼び出すと、3回呼び出されると思います。このような
Clock obj;
obj.draw() //The Window::draw() function got invoked three times?
私は正しいですか?
更新:申し訳ありませんが、コードを読み間違えました。正しいコードは次のとおりです。
class Clock : public Window_with_border, public Window_with_menu {
public:
void own_draw() { //sth }
void draw() {Window::draw(); Window_with_border::own_draw(); Window_with_menu::own_draw(); own_draw(); }
};
だから私は間違っていた。
より長い説明:それは著者が話していることです-それはWindow::draw()
3回呼ばれます:
最初のものを省略して、次のように書き直すことができます。
class Clock : public Window_with_border, public Window_with_menu {
public:
void own_draw() { //sth }
void draw() {
Window_with_border::draw();
Window_with_menu::draw();
own_draw(); }
};
しかし、それでも2回なので、最終的には次のようになります。
class Clock : public Window_with_border, public Window_with_menu {
public:
void own_draw() { //sth }
void draw() {
Window::draw();
Window_with_border::own_draw();
Window_with_menu::own_draw();
own_draw(); }
};
または:
class Clock : public Window_with_border, public Window_with_menu {
public:
void own_draw() { //sth }
void draw() {
Window_with_border::draw();
Window_with_menu::own_draw();
own_draw(); }
};
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加