藏經閣

一切有為法,如夢幻泡影,如露亦如電,應作如是觀。

virtual function
如果子class 有override virtual function,就會跳到下面的class做,base class不做事
如果子class 沒有override virtual function,base class就要做事

Ex:
class B{
public:
virtual void f(){
cout<< "BBB";
}
};
class A:public B{
public:
void f(){
cout <<"AAA";
}
};
int main(){
B *b = new A();
b->f(); // 印出AAA
return 0;
}

Ex:
class B{
public:
virtual void f(){
cout<< "BBB";
}
};
class A:public B{
};
int main(){
B *b = new A();
b->f(); // 印出BBB
return 0;
}

如果Base Class的function不是virtual,則子class的function無法覆蓋。如下例:
Ex:
class B{
public:
     void f(){ // non-virtual
        cout<< "BBB";
    }
};
class A:public B{
public:
   
    void f(){ // cannot override a
non-virtual function
       cout <<"AAA";
    }
};
int main(){
    B *b = new A();
    b->f(); // 印出BBB
    return 0;
}
 


Pure virtual function
base class的Pure virtual function不實做。
子class一定要override pure virtual function

Ex:
class B{
public:
virtual void f() = 0;
};
class A:public B{
public:
void f(){
cout <<"AAA";
}
};
int main(){
B *b = new A();
b->f(); // 印出AAA
return 0;
}

Virtual function: Differences between C++ and Java
C++ Java
Pure Virtual Function vitual void func() = 0; abstarct void func();
Impure Virtual Function vitual void func(); void func();
Non-Virtual Function void func(); final void func();
Hiding Inherited Names Yes No
Prohibiting Inheritance No final class

如何在Blogger新增隨機文章

Blogger Hack - How to add a Random Post Gadget in Blogger)

 


1 意見

  1. 黃智霖  

    如果Base Class的function不是virtual,則子class的function無法覆蓋。如下例:

    這是錯的吧?

張貼留言