C++ 知识点记录(6)类的继承(Cap13)

1. 多态公有继承

        派生类不能直接访问基类的私有数据,而必须使用基类的公有方法才能访问这些数据。访问的方式取决于方法。构造函数使用一种技术,而其他成员函数使用另一种技术。派生类构造函数在初始化基类私有数据时,采用的是成员初始化列表语法非构造函数不能使用成员初始化列表语法,但派生类方法可以调用公有的基类方法。在派生类方法中,标准技术是使用作用域解析运算符来调用基类方法。

#pragma once
// brass.h -- bank account classes -- 13.7
#ifndef BRASS_H_
#define BRASS_H_
#include <string>

// Brass Account 支票账户信息
class Brass {
private:
	std::string fullName;            // 客户姓名
	long acctNum;                    // 账号
	double balance;                  // 当前结余
public:
	Brass(const std::string& s = "Nullbody", long an = -1, double bal = 0.0);   // 构造函数,创建账户
	void Deposit(double amt);             // 存款
	virtual void Withdraw(double amt);    // 取款
	double Balance() const;               // 显示余额
	virtual void ViewAcct() const;        // 显示账户信息
	virtual ~Brass(){}                    // 析构函数
};

// Brass Plus Account 信息类
class BrassPlus : public Brass {
private:
	double maxLoan;             // 透支上限
	double rate;                // 透支贷款利率
	double owesBank;            // 当前的透支总额
public:
	BrassPlus(const std::string& s = "Nullbody", long an = -1, double bal = 0.0, double ml = 500, double r = 0.11125);
	BrassPlus(const Brass& ba, double ml = 500, double r = 0.11125);
	virtual void ViewAcct() const;        // 显示账户信息,需显示Brass Plus账户的其他信息
	virtual void Withdraw(double amt);    // 取款,需考虑透支保护
	void ResetMax(double m) { maxLoan = m; }   // 重置透支限额
	void ResetRate(double r) { rate = r; }     // 重置利率
	void ResetOwes() { owesBank = 0; }         // 重置欠款总额
};

#endif // !BRASS_H_
// brass.cpp -- bank account class methods
#include <iostream>
#include <string>
#include "brass.h"
using std::cin;
using std::cout;
using std::string;
using std::endl;

// formatting stuff
typedef std::ios_base::fmtflags format;
typedef std::streamsize precis;
format setFormat();
void restore(format f, precis p);

// Brass methods
Brass::Brass(const string& s, long an, double bal) {
	fullName = s;
	acctNum = an;
	balance = bal;
}

void Brass::Deposit(double amt) {
	if (amt < 0)
		cout << "Negative deposit not allowed; deposit is cancelled.\n";
	else
		balance += amt;
}

void Brass::Withdraw(double amt) {
	// set up ###.## format
	format initialState = setFormat();
	precis prec = cout.precision(2);

	if (amt < 0)
		cout << "Withdrawal amount must be positive; withdrawal canceled.\n";
	else if (amt <= balance)
		balance -= amt;
	else
		cout << "Withdrawal amoun
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值