C++编程思想 第1卷 第15章 多态性和虚函数 抽象基类和纯虚函数 纯虚定义

在基类中,对纯虚函数提供定义是可能的。我们仍然告诉编译器不允许产生
抽象基类的对象,而且如果要创建对象,则纯虚函数必须在派生类中定义

纯虚定义

//: C15:PureVirtualDefinitions.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Pure virtual base definitions
#include <iostream>
using namespace std;

class Pet {
public:
  virtual void speak() const = 0;
  virtual void eat() const = 0;
  // Inline pure virtual definitions illegal:
  //!  virtual void sleep() const = 0 {}
};

// OK, not defined inline
void Pet::eat() const {
  cout << "Pet::eat()" << endl;
}

void Pet::speak() const { 
  cout << "Pet::speak()" << endl;
}

class Dog : public Pet {
public:
  // Use the common Pet code:
  void speak() const { Pet::speak(); }
  void eat() const { Pet::eat(); }
};

int main() {
  Dog simba;  // Richard's dog
  simba.speak();
  simba.eat();
} ///:~

Pet的VTABLE表仍然空着,但在这个派生类中刚好有一个函数,可以通过
名字调用它
 

输出
Pet::speak()
Pet::eat()

猜你喜欢

转载自blog.csdn.net/eyetired/article/details/81351298