第10章 对象和类
来源:互联网 发布:杂志排版软件 编辑:程序博客网 时间:2024/05/16 05:30
1.对象和类的简单例子,包括一个.h文件,两个.cpp文件。股票数量和价格。
stock10.h
#ifndef STOCK10_H_#define STOCK10_H_#include<string>using namespace std;class Stock{private: string company; long shares; double share_val; double total_val; void set_tot() { total_val=shares*share_val; }public: Stock(); Stock(const 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();};#endif
stock10.cpp
#include<iostream>#include"stock10.h"using namespace std;Stock::Stock(){ cout<<"Default constructor called\n"; company="no name"; shares=0; share_val=0.0; total_val=0.0;}Stock::Stock(const string &co,long n,double pr){ cout<<"my constructor called\n"; company=co; shares=n; share_val=pr; set_tot();}Stock::~Stock(){ cout<<"Bye, "<<company<<"\n";}void Stock::buy(long num,double price){ shares=shares+num; share_val=price; set_tot();}void Stock::sell(long num,double price){ cout<<"sell:\n"; shares=shares-num; share_val=price; set_tot();}void Stock::update(double price){ share_val=price; set_tot();}void Stock::show(){ cout<<"Company: "<<company<<"Shares: "<<shares<<endl; cout<<"share price: "<<share_val<<" total worth:"<<total_val<<endl;}
usestock.cpp
#include<iostream>#include"stock10.h"using namespace std;int main(){ { cout<<"Using constructor to creat a new object!\n"; Stock stock1("Nanosmart",12,20.0); stock1.show(); Stock stock2=Stock("Boffo Objects",2,2.0); stock2.show(); stock2.buy(100,12); stock2.show(); cout<<endl; stock2.sell(50,10); stock2.show(); cout<<"Assigning stock1 to stock2:\n"; stock2=stock1; cout<<"Listing stock1 and stock2:\n"; stock1.show(); stock2.show(); cout<<"Using a constructor to reset an object\n"; stock1=Stock("Nifty",10,50.0); cout<<"Revised stock1:\n"; stock1.show(); cout<<"done!"; } return 0;}
2.this指针
.h文件修改
const Stock & Stock::topval(const Stock &s)const;
.cpp的类方法的实现的修改
const Stock & Stock::topval(const Stock &s)const{ if(s.total_val>total_val) return s; else return *this;}
.cpp的main函数修改
cout<<"*this:较高的是:\n"; Stock top; top=stock1.topval(stock2); top.show();
3.ADT用类来进行描述
stack.h
#ifndef STACK_H_#define STACK_H_typedef unsigned long Item;class Stack{private: enum{MAX=10}; Item items[MAX]; int top;public: Stack(); bool isempty()const; bool isfull()const; bool push(const Item &item); bool pop(Item &item);};//注意有分号!!#endif
stack.cpp
#include "stack.h"Stack::Stack(){ top=0;}bool Stack::isempty()const{ return top==0;}bool Stack::isfull()const{ return top==MAX;}bool Stack::pop( Item &item){ if(top>0) { item=items[--top]; return true; } else return false;}bool Stack::push(const Item &item){ if(top<MAX) { items[top++]=item; return true; } else return false;}
stacker.cpp
#include<iostream>#include<cctype>#include"stack.h"using namespace std;int main(){ Stack st; char ch; unsigned long po; cout<<"Please enter A to add a purchase order,\n" <<"P to process a po,or Q to quit.\n"; cin>>ch; while(ch!='q') { if(!isalpha(ch)) { cout<<"error input!\n"; continue; } switch(ch) { case 'A': case 'a':cout<<"Enter a PO number to add:"; cin>>po; if(st.isfull()) cout<<"stack is already full\n"; else st.push(po); break; case 'p': case 'P': if(st.isempty()) cout<<"stack already empty\n"; else{ st.pop(po); cout<<"PO #"<<po<<" poped\n"; } break; } cout<<"Please enter A to add a purchase order,\n" <<"P to process a po,or Q to quit.\n"; cin>>ch; } cout<<"BYE!\n"; return 0;}
4.移动x,y. 返回类型为Move的对象 可以用Move的构造方法!!
move.h
#ifndef MOVE_H_#define MOVE_H_class Move{private: double x; double y;public: Move(double a=0,double b=0); void showmove()const; Move add(const Move &m)const; void reset(double a=0,double b=0);};#endif
move.cpp
#include<iostream>#include"move.h"using namespace std;Move::Move(double a,double b){ x=a; y=b;}void Move::showmove()const{ cout<<"now x="<<x<<" y="<<y<<endl;}Move Move::add(const Move &m)const //重要!!{ return(Move(x+m.x,y+m.y));}void Move::reset(double a,double b){ x=a; y=b;}
usemove.cpp
#include<iostream>#include"move.h"using namespace std;int main(){ Move(); Move m1=Move(2.0,3.0); Move m2=Move(1.0,2.0); m1.showmove(); m1.add(m2).showmove(); //用m1.add(m2);m1.showmove(); 这样并没有改变m1的值。 m2.reset(3.4,4.5); m2.showmove(); cout<<"BYe!"<<endl;}
0 0
- 第10章 类和对象
- 第10章类和对象
- 第10章 对象和类
- 第10章——对象和类
- C++ primer plus 第10章 对象和类
- C++学习笔记(第10章->对象和类)
- C++ Primer Plus 第10章 对象和类
- 【《C++ Primer Plus》读书笔记】第10章 对象和类
- c++ primer plus 第10章 类和对象
- 【C++】第10章 对象和类 知识点总结
- 第10章:SQL和TQuery对象
- 第3章---类和对象
- 第4章 类和对象
- 第8章 对象和类
- 第11章复习 类和对象
- jvm 第6章 类和对象
- 第4章 对象和类
- 【第6章】对象和类
- zabbix监控环境搭建指南---网上最最详细搭建过程
- HDOJ1231 最大连续子序列(dp)
- MVC4 入门
- 使用Servlet获取用户日志
- Course Schedule
- 第10章 对象和类
- 反汇编一个简单的C程序
- 【Trie树】Poj2513题解
- 使用Dockerfile创建带Apache服务的Centos Docker镜像
- Android开发中无处不在的设计模式——单例模式
- 在jsp页面中运行vbs
- 1go网消费联盟
- JTabel鼠标按下与放开getValueIsAdjusting()
- Tomcat的URL中文乱码解决以及传输优化