1. 程式人生 > >第十五章 面向對象程序設計

第十五章 面向對象程序設計

受保護 程序設計 clu clas stream sco pac virtual ace

15.1

虛函數:基類的成員函數,並在其前面添加關鍵字virtual,此類函數是基類希望其派生類進行覆蓋的函數

15.2

protected:對應受保護成員,派生類可以訪問該成員,但其他用戶則禁止訪問該成員

15.3

技術分享
 1 class Quote {
 2 public:
 3     Quote() = default;
 4     Quote(const string &book, double sales_price): bookNo(book), price(sales_price) {}
 5     string isbn() const { return bookNo; }
6 virtual double net_price(size_t n) const { return n * price; } 7 virtual ~Quote() = default; 8 private: 9 string bookNo; 10 protected: 11 double price = 0.0; 12 }; 13 14 double print_total(ostream &os, const Quote &item, size_t n) 15 { 16 double ret = item.net_price(n);
17 os << "ISBN: " << item.isbn() << " # sold: " << n << " total due: " << ret << endl; 18 return ret; 19 }
View Code

15.4

(a):錯誤,不可以繼承自己

(b):正確

(c):錯誤,派生類的聲明不需要包含它的派生列表

15.5

class Bulk_quote : public Quote {
public:
	Bulk_quote() = default;
	Bulk_quote(const string &book, double sales_price, size_t n, double dis): Quote(book, sales_price), min_qty(n), discount(dis) {}
	double net_price(size_t n) const override;
private:
	size_t min_qty = 0;
	double discount = 0.0;
};

double Bulk_quote::net_price(size_t n) const
{
	if (n >= min_qty)
		return n * (1 - discount) * price;
	else
		return n * price;
}

15.6

技術分享
 1 #include <iostream>
 2 #include <string>
 3  
 4 using namespace std;
 5 
 6 class Quote {
 7 public:
 8     Quote() = default;
 9     Quote(const string &book, double sales_price): bookNo(book), price(sales_price) {}
10     string isbn() const { return bookNo; }
11     virtual double net_price(size_t n) const { return n * price; }
12     virtual ~Quote() = default;
13 private:
14     string bookNo;
15 protected:
16     double price = 0.0; 
17 };
18 
19 class Bulk_quote : public Quote {
20 public:
21     Bulk_quote() = default;
22     Bulk_quote(const string &book, double sales_price, size_t n, double dis): Quote(book, sales_price), min_qty(n), discount(dis) {}
23     double net_price(size_t n) const override;
24 private:
25     size_t min_qty = 0;
26     double discount = 0.0;
27 };
28 
29 double Bulk_quote::net_price(size_t n) const
30 {
31     if (n >= min_qty)
32         return n * (1 - discount) * price;
33     else
34         return n * price;
35 }
36 
37 double print_total(ostream &os, const Quote &item, size_t n)
38 {
39     double ret = item.net_price(n);
40     os << "ISBN: " << item.isbn() << " # sold: " << n << " total due: " << ret << endl;
41     return ret; 
42 }
43 
44 
45 int main()
46 {
47     Quote book("3-298-15-2", 37.0);
48     Bulk_quote book2("3-298-15-2", 37.0, 5, 0.2);
49     print_total(cout, book2, 1);
50     print_total(cout, book2, 5);
51     print_total(cout, book, 5);
52     return 0; 
53 }
View Code

第十五章 面向對象程序設計