基类和派生类的头文件及cpp文件结构
以Quote基类和Bulk_quote派生类为例,记录头文件和cpp文件的构成。
目录
Quote.h
#ifndef QUOTE_H
#define QUOTE_H
#include<string>
class Quote
{
public:
Quote() =default; //默认构造函数
Quote(const std::string &book,double sales_price): //构造函数
bookNo(book),price(sales_price) {}
std::string isbn() const {return bookNo;}
virtual double net_price(std::size_t n) const; //虚函数:由派生类派根据折扣来重写
private:
std::string bookNo; //只被基类的函数使用
protected:
double price=0.0; //会被被派生类改写的函数使用
};
#endif
Quote.cpp
#include"Quote.h"
double Quote::net_price(std::size_t n) const
{
return 6.0*n;
}
Bulk_quote.h
#ifndef BULK_QUOTE_H
#define BULK_QUOTE_H
#include"Quote.h"
class Bulk_quote:public Quote
{
public:
//默认构造函数
Bulk_quote()=default;
//构造函数 调用基类构造函数(思想:每个类定义自己的接口)
Bulk_quote(const std::string &book,double sales_price,std::size_t,double dis):
Quote(book,sales_price),min_qty(size_t),discount(dis) {};
//覆盖基类虚函数
double net_price(std::size_t n) const override;
private:
//派生类的新成员
std:size_t min_qty=0;
double discount=0.0;
};
#endif
Bulk_quote.cpp
#include"Bulk_quote.h"
double Bulk_quote::net_price(std::size_t n) const
{
return n*5;
}
main.cpp
#include<iostream>
#include"Quote.h"
#include"Bulk_quote.h"
using std::cout;
using std::endl;
using std::ostream;
//将基类对象的引用作为参数
double print_total(ostream &os,const Quote &item,size_t n)
{
double ret=item.net_price(n); //通过基类指针和引用调用虚函数会在运行时发生动态绑定
return ret;
}
int main()
{
Quote item; //基类
Bulk_quote bulk; //派生类
cout<<print_total(cout,bulk,5)<<endl; //静态类型为Quote,动态类型为Bulk_quote
cout<<print_total(cout,item,5)<<endl; //静态类型为Quote,动态类型为Quote
return 0;
}