写了一个小程序来复习 基类和派生类 知识
※派生类中虚函数的声明(第 7.4 节)必须与基类中的定义方式完全匹配,但有一个例外:返回对基类型的引用(或指针)的虚函数。派生类中的虚函数可以返回基类函数所返回类型的派生类的引用(或指针)。例如,Item_base 类可以定义返回 Item_base* 的虚函数,如果这样,Bulk_item 类中定义的实例可以定义为返回 Item_base* 或 Bulk_item*。
※一旦函数在基类中声明为虚函数,它就一直为虚函数,派生类无法改变该函数为虚函数这一事实。派生类重定义虚函数时,可以使用 virtual 保留字,但不是必须这样做。
1.item_base.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class item_base
{
public:
explicit item_base( const string &isb = "base" , const double &pri = 1.0);
/*
• 继承层次的根类一般都要定义虚析构函数。
• 除了构造函数之外,任意非 static 成员函数都可以是虚函数。
保留字只在类内部的成员函数声明中出现,不能用在类定义体
外部出现的函数定义上。
*/
virtual ~item_base(void);
/* 友元关系不能继承 */
friend class frnd;
public:
virtual double net_price( size_t & ) const;
// virtual void print_total( ostream &os , const item_base &item ,size_t n ) const;
string book() const;
private:
string isbn;
protected:
/*
• 像 private 成员一样,protected 成员不能被类的用户访问。
• 像 public 成员一样,protected 成员可被该类的派生类访问。