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;
}