百度经验实用生活指南,湖南seo优化报价,免费行情软件网站下载视频,网站制作多少钱方案10.1 过程性编程和面向对象编程 10.2 抽象和类 10.3 类的构造函数和析构函数 类的定义和使用#xff08;买卖股票#xff09;
头文件stock10.h
#ifndef __STOCK00__H__
#define __STOCK00__H__#include stringclass Stock {
// pravate的内容只能通过public访问
p…10.1 过程性编程和面向对象编程 10.2 抽象和类 10.3 类的构造函数和析构函数 类的定义和使用买卖股票
头文件stock10.h
#ifndef __STOCK00__H__
#define __STOCK00__H__#include stringclass Stock {
// pravate的内容只能通过public访问
private:std::string company; // 公司名字long shares; // 股票的数量double share_val; // 每只股票的价格double total_val; // 股票总价值void set_total() {total_val shares * share_val;}; // 函数在类的声明中定义将自动成为内联函数public:// 默认构造函数Stock();// 构造函数Stock(const std::string co, long n 0, double pr 0.0);// 析构函数~Stock();// 买入股票买入数量买入价格void buy(long num, double price);// 卖出股票卖出数量卖出价格void sell(long num, double price);// 传递最新价格void update(double price);// 显示股票信息void show() const;
}; #endif // ! __STOCK00_H__
源代码usestock2.cpp
#include iostream
#include stock10.hint main() {using std::cout;cout Using constructors to create new objects\n;Stock stock1(NanoSmart, 12, 20.0); // 隐式调用stock1.show();Stock stock2 Stock(Boffo Objects, 2, 2.0); // 显式调用stock2.show();cout Assigning stock1 to stock2:\n;stock2 stock1; // 类的对象可以相互之间对拷cout Listing stock1 and stock2:\n;stock1.show();stock2.show();cout Using a constuctor to reset an Object\n;stock1 Stock(Nifty Foods, 10, 50.0); // 创建临时变量再赋值cout Revised stock1:\n;stock1.show();cout Done\n;const Stock land Stock{ Klu Pro };// show()函数要接收const的对象函数定义时要在函数名后面加上constland.show();return 0;
}
源代码stock10.cpp
#include iostream
#include stock10.hStock::Stock() {std::cout Default constructor called\n;company no name;shares 0;share_val 0.0;total_val 0.0;
}Stock::Stock(const std::string co, long n, double pr) {company co;if (n 0) {std::cout Number cant be negative, shares set to 0 std::endl;shares 0;}else shares n;share_val pr;set_total();
}Stock::~Stock() {std::cout Bye, company !\n;
}void Stock::buy(long num, double price) {if (num 0) {std::cout Number cant be negative, transatcion failed. std::endl;}else {shares num;share_val price;set_total();}
}void Stock::sell(long num, double price){if (num 0) {std::cout Number cant be negative, transatcion failed. std::endl;}else if (num shares){std::cout Number is more than you have, transaction failed. std::endl;}else {shares - num;share_val price;set_total();}
}void Stock::update(double price) {share_val price;set_total();
}void Stock::show() const{ // 代表函数不会修改值可以接收const的对象std::cout Company: company std::endl;std::cout Shares: shares std::endl;std::cout Share price: share_val std::endl;std::cout Total worth: total_val std::endl;
}
10.4 This指针 This指针的使用比较股票总值
// 比较股票的总金额并返回一个对象
// 第2个const函数不会修改被显式访问的对象
// 第3个const函数不会修改被隐式访问的对象
// 第1个const函数会返回一个const Stock对象
const Stock Stock::topval(const Stock s) const{if (s.total_val total_val) // total_val this-total_valreturn s;elsereturn *this; // this是一个指针要返回值需要取值运算符
}
10.5 对象数组 使用对象数组找出总价值最大的股票
int main(){Stock stocks[4] {Stock(NanoSmart, 12, 20.0),Stock(Boffo Objects, 200, 2.0),Stock(Monolithic Obelisks, 130, 3.25),Stock(Fleep Enterprises, 60, 6.5)};std::cout Stock holdings:\n;int st;for (st 0; st 4; st)stocks[st].show();const Stock * top stocks[0];for (st 1; st 4; st)// 使用指针的方法返回一个对象然后再取地址赋给toptop top-topval(stocks[st]);std::cout \nMost valuable holding:\n;top-show();return 0;
}
10.6 类作用域 10.7 抽象数据类型 使用类实现抽象数据类型栈
头文件stack.h
#ifndef __STACK__H__
#define __STACK__H__typedef unsigned long Item; // 类型别名如果需要放别的类型就改这里class Stack {private:enum {MAX 10}; // 创建枚举类型遇到MAX就替换成10Item items[MAX];int top; // 栈顶的指针public:Stack();bool isempty() const; // 栈是否为空bool isfull() const; // 栈是否满了bool push(Item item); // 入栈成功返回1失败返回0bool pop(Item item); // 出栈成功返回1失败返回0
}; #endif
源文件stacker.cpp
#include iostream
#include stack.h
using namespace std;int main() {char ch;unsigned long po;Stack st;cout Enter A to push to stack\n;cout Enter P to pop from stack\n;cout Enter Q to quit\n;while (cin ch ch ! Q) {while (cin.get() ! \n) // 删除输入行中剩余部分continue;switch (ch) {case A:cout Enter a number: endl;cin po;if (st.isfull())cout Stack already full. endl;elsest.push(po);break;case P:if (st.isempty())cout Stack is empty. endl;else {st.pop(po);cout po is poped. endl;}break;}cout Enter A to push to stack\n;cout Enter P to pop from stack\n;cout Enter Q to quit\n;}return 0;
}
源文件stack.cpp
#include stack.hStack::Stack() {top 0;
}bool Stack::isempty() const {return top 0;
}bool Stack::isfull() const {return top MAX;
}bool Stack::push(Item item){if (top MAX) {items[top] item; // 先操作后加加return true;}elsereturn false;
}bool Stack::pop(Item item) {if (top 0) {item items[--top]; // 先减减再操作return true;}elsereturn false;
}