A pure virtual function (pure virtual) is a method in a base class, just a declaration, not a definition, is a generalization concept (general concept);
is to put the corresponding virtual function, the end of the Add "= 0", the virtual function becomes a pure virtual function, you can not add a definition;
If it is another virtual function, it must be defined (define), even if it is not used;
A base class that contains pure virtual functions, an abstract base class (abstract base class) that cannot be defined (object) and can only be used as an inheritance define;
Code:
* * * CppPrimer.cpp * * Created on:2013.11.12 * author:caroline//*eclipse cdt*//* More highlights: http: www.bianceng.cnhttp://www.bianceng.cn/programming/cplus/*/#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::strin
G ISBN () const {return bookno;} Virtual Double Net_price (std::size_t N) const {return n price;}//virtual function virtual ~quote () = default;
Dynamic binding destructor private:std::string Bookno;
Protected://protected type Double price = 0.0;
};
Class Disc_quote:public Quote {//abstract base class public:disc_quote () = default; Disc_quote (const std::string&, double, std::size_t qty, double Disc): Quote (book, price), quant ity (qty), Discount (disc) {} double Net_price (std:: size_t) const = 0;
Pure virtual function protected:std::size_t quantity = 0;
Double discount = 0.0;
};
Class Bulk_quote Final:public disc_quote {//final qualifier, cannot be inherited public:bulk_quote () = default; Bulk_quote (const Std::string&book, double p, std::size_t qty, double disc): Disc_quote (Book, p, qty, disc)
{}///Using the constructor of the base class double Net_price (std::size_t cnt) const override;
}; Double Bulk_quote::net_price (std::size_t cnt) const {if (CNT >= quantity) return CNT * (1-discount) *
Price
else return CNT * price; Double Print_total (std::ostream &os, const quote& Item, std::size_t N) {double ret = item.net_
Price (n); Os << "ISBN:" << item.isbn () << "# Sold:" << n << "total due:" << ret << St
D::endl;
return ret;
int main (void) {Quote Q ("Cppprimer", 99); Bulk_quote BQ ("Cppprimer", 99, 10, 0.5);
quote& RQ = BQ;
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;
Std::cout << "R Quote net_price:" << rq.net_price (n) << Std::endl;
Dynamic binding Quote Base ("Effectivecpp", 50);
Print_total (cout, base, 10);
Bulk_quote derived ("Effectivecpp", 50, 5,. 19);
Print_total (cout, derived, 10);
Copy-assignment operation, derived class-> base = derived;
Std::cout << "Net_price:" << base.net_price << Std::endl; Double undiscounted = derived. Quote::net_price (20);
Derived classes use the virtual functions of the base class Std::cout << "undiscounted:" << undiscounted << Std::endl;
return 0; }
Author: csdn Blog spike_king