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 }