第 15章 面向对象程序设计(一)

基类和派生类的头文件及cpp文件结构

以Quote基类和Bulk_quote派生类为例,记录头文件和cpp文件的构成。

目录

基类和派生类的头文件及cpp文件结构

Quote.h

Quote.cpp

Bulk_quote.h

Bulk_quote.cpp

main.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;
}

猜你喜欢

转载自blog.csdn.net/scqlovezy/article/details/82841009