1. 程式人生 > >C++ 虛擬函式的兩個例子

C++ 虛擬函式的兩個例子

1. 第一個例子是朋友告訴我Qt中的某個實現

 1 #include <iostream>
 2 
 3 // Qt中的某個實現
 4 class A{  5 public:  6 A() = default;  7 virtual ~A() = default;  8  9 virtual void add(){ std::cout << "A add" << std::endl; }; 10 11 void print(){ this->add(); }; 12 }; 13 14 class B : public A{ 15 public: 16 B() = default; 17 18 virtual void add(){ std::cout << "B add" << std::endl; } 19 }; 20 21 int main(int argc, char **argv){ 22  B b; 23 b.print(); // B add 24 25 return 0; 26 }

 

2. 第二個例子是我從SFML中看到的某個實現

 1 #include <iostream>
 2 
 3 // SFML中實現m_window.draw(b)
 4 class A{  5 public:  6 A() = default;  7 virtual ~A() = default;  8  9 virtual void add() = 0; 10 }; 11 12 class B : public A{ 13 public: 14 B() = default; 15 16 private: 17 virtual void add(){ std::cout << "B add" << std::endl; } 18 }; 19 20 void draw(A &a){ 21  a.add(); 22 } 23 24 int main(int argc, char **argv){ 25  B b; 26 27 draw(b); // B add 28 29 return 0; 30 }