面向对象编程(OOP)是一种特殊的、设计程序的概念性方法,C++通过一些特性改进了C语言,使得应用这种方法更容易。下面是最重要的OOP特性:
以炒股这个场景为例,刚开始我们先简化场景,假定一个人只能持有一种类型的股票(后续随着学习的深入,继续丰富)。我们将股票封装成一个类Stock,需要存储以下信息:
一个自然人可以执行的操作:
// stock.h #ifndef CPP_PRIMER_STOCK_H #define CPP_PRIMER_STOCK_H #include <string> class Stock { public: void Buy(const std::string &company, int n, double price); void Increase(int n); void Reduce(int n); void Update(double price); void Show(); private: std::string company_; int holdings_; double price_; }; #endif //CPP_PRIMER_STOCK_H
(1) 访问控制:private 和 public,描述了对类成员的访问控制,使用类对象的程序都可以直接访问共有部分, 但只能通过公有成员函数来访问对象的私有成员。
(2) 控制对成员的访问,公有还是私有:由于隐藏数据是OOP主要目标之一,因此数据项通常放在私有部分,组成类接口的成员函数放在公有部分。
// stock.cpp(假定输入参数都合法,懒得进行参数校验了) #include "stock.h" #include <iostream> void Stock::Buy(const std::string &company, int n, double price) { company_ = company; holdings_ = n; price_ = price; } void Stock::Increase(int n) { holdings_ += n; } void Stock::Reduce(int n) { holdings_ -= n; } void Stock::Update(double price) { price_ = price; } void Stock::Show() { std::cout << "You hold " << holdings_ << " " << company_ << " Issued" << ", per share " << price_ << " Yuan, total " << price_ * holdings_ << " YUAN" << std::endl; }
#include "stock.h" int main() { Stock stock1, stock2; stock1.Buy("ZET", 1000, 3.2); stock2.Buy("HUAWEI", 1000, 3.3); stock1.Increase(500); stock1.Reduce(100); stock2.Increase(500); stock2.Reduce(100); stock1.Show(); stock2.Show(); }
You hold 1400 ZET Issued, per share 3.2 Yuan, total 4480 YUAN You hold 1400 HUAWEI Issued, per share 3.3 Yuan, total 4620 YUAN
(1)默认构造函数
(2)普通构造函数
(3)拷贝构造函数
(4)移动构造函数
待补充