C++ - 继承(inheritance) 和 动态绑定(dynamic binding) 简介

继承(inheritance) 和 动态绑定(dynamic binding) 简介

 

本文地址: http://blog.csdn.net/caroline_wendy/article/details/15646601

 

继承(inheritance)动态绑定(dynamic binding) 是面向对象的重要组成部分, 即继承(inheritance)和多态(polymorphism),

可以使 派生类(derived class)拥有基类(base class) 的接口(interface);

派生类可以覆写(override)基类的虚函数(virtual function), 符合特定的功能;

派生类可以隐式地转换为基类 (derived-to-base conversion), 但不可逆, 因为派生类的对象包含自己的部分 和 基类的对象的部分;

尽量使用基类的构造器, 去构造基类的对象, 可以易于管理; 对于静态成员,只定义(define)一次, 忽略其他定义;

可以显示定义类无法被继承, 在类后添加 "final" 限定词;

代码:

/*
 * CppPrimer.cpp
 *
 *  Created on: 2013.11.12
 *      Author: Caroline
 */

/*eclipse cdt*/

#include <iostream>
#include <string>
#include <cstddef>

using namespace std;

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 { return n* price; } //虚函数
	virtual ~Quote() = default; //动态绑定析构器
private:
	std::string bookNo;
protected: //受保护类型
	double price = 0.0;
};

class Bulk_quote final : public Quote { //final限定词, 无法被继承
public:
	Bulk_quote() = default;
	Bulk_quote(const std::string&book, double p, std::size_t qty, double disc) :
		Quote(book, p), min_qty(qty), discount(disc) {} //使用基类的构造器
	double net_price(std::size_t cnt) const override;
private:
	std::size_t min_qty = 0; //折扣的最小量
	double discount = 0.0; //折扣
};
double Bulk_quote::net_price(std::size_t cnt) const
{
	if (cnt >= min_qty)
		return cnt * (1-discount) * price;
	else
		return cnt * price;
}
int main (void) {

	Quote q("CppPrimer", 99);
	Bulk_quote bq("CppPrimer", 99, 10, 0.5);
	std::size_t n = 20;
	std::cout << "We want to buy " << n << " books. " << std::endl;
	std::cout << "Quote net_price : " << q.net_price(n) << std::endl;
	std::cout << "Bulk_quote net_price : " << bq.net_price(n) << std::endl;

	return 0;

}



 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caroline S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值