CPP_Basic_Code_P10.1-PP10.10.8
// The Notes Created by Z-Tech on 2017/2/17.
// All Codes Boot on 《C++ Primer Plus》V6.0
// OS:MacOS 10.12.4
// Translater:clang/llvm8.0.0 &g++4.2.1
// Editer:iTerm 2&Sublime text 3
// IDE: Xcode8.2.1&Clion2017.1
//P10.1-P10.3
Z_Head.h
#ifndef CLION_VERSION_Z_HEAD_H
#define CLION_VERSION_Z_HEAD_H
#include
class Stock
{
private:
std::string company;
long shares;
double share_val;
double total_val;
void set_tot() {total_val=shares*share_val;}
public:
void acquire(const std::string& co,long n,double pr);
void buy(long num,double price);
void sell(long num,double price);
void update(double price);
void show();
};
#endif
Main.cpp
#include
#include "Z_Head.h"
int main()
{
Stock fluffy_the_cat;
fluffy_the_cat.acquire("NanoSmart",20,12.50);
fluffy_the_cat.show();
fluffy_the_cat.buy(15,18.125);
fluffy_the_cat.show();
fluffy_the_cat.sell(400,20.00);
fluffy_the_cat.show();
fluffy_the_cat.buy(300000,40.125);
fluffy_the_cat.show();
fluffy_the_cat.sell(300000,0.125);
fluffy_the_cat.show();
fluffy_the_cat.update(99.99);
fluffy_the_cat.show();
return 0;
}
SubFunctions.cpp
#include
#include "Z_Head.h"
void Stock::acquire(const std::string& co,long n,double pr)
{
company=co;
if (n<0)
{
std::cout<<"Number of shares can't be negative; "
<shares)
{
cout<<"Number of shares can't be negative. "
<<"Transaction is aborted.\n";
}
else
{
shares-=num;
share_val=price;
set_tot();
}
}
void Stock::update(double price)
{
share_val=price;
set_tot();
}
void Stock::show()
{
std::cout<<"Company: "<
class Stock
{
private:
std::string company;
long shares;
double share_val;
double total_val;
void set_tot() {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();
};
#endif
Main.cpp
#include
#include "Z_Head.h"
int 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 constructors to reset an objects\n";
stock1=Stock("Nifty Foods",10,50.0);
cout<<"Revised stock1:\n";
stock1.show();
cout<<"Done.\n";
}
return 0;
}
SubFunctions.cpp
#include
#include "Z_Head.h"
Stock::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)
{
std::cout<<"Constructor using "<shares)
{
cout<<"Number of shares can't be negative. "
<<"Transaction is aborted.\n";
}
else
{
shares-=num;
share_val=price;
set_tot();
}
}
void Stock::update(double price)
{
share_val=price;
set_tot();
}
void Stock::show()
{
using std::cout;
using std::ios_base;
//强制使用小数点
ios_base::fmtflags orig=cout.setf(ios_base::fixed,ios_base::floatfield);
std::streamsize prec=cout.precision(3);
cout<<"Company: "<
class Stock
{
private:
std::string company;
long shares;
double share_val;
double total_val;
void set_tot() {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;
const Stock& topval(const Stock& s) const;
};
#endif
Main.cpp
#include
#include "Z_Head.h"
const int STKS=4;
int main()
{
Stock stocks[STKS]
{
Stock("NanoSmart",12,20.0),
Stock("Boffo Objects",200,2.0),
Stock("Monolithic Oblisks",130,3.25),
Stock("Fleep Enterprises",60,6.5)
};
std::cout<<"Stock holding:\n";
int st;
for (st=0;sttopval(stocks[st]);//难点,对引用对象再次取地址就是指针!!!
std::cout<<"\nMost valuable holding:\n";
top->show();
return 0;
}
SubFunctions.cpp
#include
#include "Z_Head.h"
Stock::Stock()//构造函数1
{
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)//构造函数2
{
std::cout<<"Constructor using "<shares)
{
cout<<"Number of shares can't be negative. "
<<"Transaction is aborted.\n";
}
else
{
shares-=num;
share_val=price;
set_tot();
}
}
void Stock::update(double price)
{
share_val=price;
set_tot();
}
void Stock::show() const
{
using std::cout;
using std::ios_base;
//强制使用小数点
ios_base::fmtflags orig=cout.setf(ios_base::fixed,ios_base::floatfield);
std::streamsize prec=cout.precision(3);
cout<<"Company: "<total_val)
return s;
else
return *this;//this指针,指向本对象
}
//P10.10-P10.12
Z_Head.h
#ifndef CLION_VERSION_Z_HEAD_H
#define CLION_VERSION_Z_HEAD_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
SubFunctions.cpp
#include "Z_Head.h"
Stack::Stack()
{
top=0;
}
bool Stack::isempty() const
{
return top==0;
}
bool Stack::isfull() const
{
return top==MAX;
}
bool Stack::push(const Item& item)
{
if (top0)
{
item=items[--top];
return true;
}
else
return false;
}
Main.cpp
#include
#include "Z_Head.h"
//#include
int main()
{
using namespace std;
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";
while (cin>>ch&&toupper(ch)!='Q')
{
while (cin.get()!='\n')
continue;
if (!isalpha(ch))
{
cout<<'\a';
continue;
}
switch (ch)
{
case 'A':
case 'a':cout<<"Enter a PO number to add: ";
cin>>po;
if (st.isfull())
cout<<"stack 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 #"<
class Bank_Account
{
private:
char user_name[35];
char user_account[25];
double user_money;
public:
Bank_Account(const char* str1="Nameless",const char* str2="Nameless",double my=0.0);
~Bank_Account();
void Show_Account(void) const;
void deposit(double my);
void withdraw(double my);
};
int main()
{
char nameT[35]="Yang XuZhou";
char Account[20]="EnochHugh_Extra";
double money=999.99;
Bank_Account userT[2];
userT[0].Show_Account();
userT[0]={nameT,Account,money};
userT[0].Show_Account();
userT[0].deposit(12.99);
userT[0].Show_Account();
userT[0].withdraw(99.22);
userT[0].Show_Account();
return 0;
}
Bank_Account::Bank_Account(const char* str1,const char* str2,double my)
{
strcpy(user_name,str1);
strcpy(user_account,str2);
user_money=my;
}
Bank_Account::~Bank_Account()
{
}
void Bank_Account::Show_Account(void) const
{
std::cout<<"Name: "<0)
user_money+=my;
else
std::cout<<"wrong nmumber!";
}
void Bank_Account::withdraw(double my)
{
if (user_money>=my)
user_money-=my;
else
{
std::cout<<"You just could withdraw $"<
class Person
{
private:
static const int LIMIT=25;
std::string lname;
char fname[LIMIT];
public:
Person(){lname="";fname[0]='\0';}
Person(const std::string& ln,const char* fn="Heyyou");
void Show() const;
void FormalShow() const;
};
int main()
{
Person one;
Person two("Smythercraft");
Person three("Dimwiddy","Sam");
one.Show();
std::cout<
class Golf
{
private:
static const int Len=40;
char fullname[Len];
int hangdicap;
public:
Golf(const char* name,int hc);
Golf();
~Golf();
const Golf& setgolf(const Golf& g);
void hangdicapf(int hc);
void showgolf() const;
};
static const int Num=3;
int main()
{
using namespace std;
Golf ZhangHu[Num]
{
Golf(),
Golf("Something is perfect!",66),
Golf("Anything is fucking!",99)
};
for (int j=0;jshowgolf();
Golf T2{"是不是傻",12};
cout<<"T2: ";
T2.showgolf();
delete T1;
return 0;
}
Golf::Golf(const char* name,int hc)
{
strcpy(fullname,name);
hangdicap=hc;
}
Golf::Golf()//警告!!默认构造函数和函数原型初始化不能同时使用!!
{
strcpy(fullname,"Nameless");
hangdicap=0;
}
const Golf& Golf::setgolf(const Golf& g)//关键核心代码
{
strcpy(fullname,g.fullname);
hangdicap=g.hangdicap;
return *this;
}
Golf::~Golf()
{
}
void Golf::hangdicapf(int hc)
{
hangdicap=hc;
}
void Golf::showgolf() const
{
std::cout<<"name: "<showSales();
std::cout<<"\n";
(xv+1)->showSales();
delete []xv;
return 0;
}
namespace SALES
{
Sales::Sales(const double ar[],int n)
{
int realv=(QUARTERS>n?n:QUARTERS);
double total=0;
for (int i=0;i>sales[i];
if (!cin)
{
cin.clear();
while (cin.get()!='\n')
continue;
}
total+=sales[i];
average=total/QUARTERS;
max=findMax(sales,QUARTERS);
min=findMin(sales,QUARTERS);
}
}
void Sales::showSales() const
{
using std::cout;
using std::endl;
cout<<"*xv sales:";
for (int i=0;imax)
max=ar[i];
}
return max;
}
double Sales::findMin(double ar[],int ARSZ)
{
double min=ar[0];
for (int i=1;i
struct customer
{
char fullname[35];
double payment;
};
typedef customer 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);
};
void get_customer(Item& cm);
int main()
{
using namespace std;
Stack st;
char ch;
customer po;
double paymentx=0;
cout<<"Please enter A to add a purchase order,\n"
<<"p to process a po,or Q to quit.\n";
while (cin>>ch&&toupper(ch)!='Q')
{
while (cin.get()!='\n')
continue;
if (!isalpha(ch))
{
cout<<'\a'<<"Try again!\n";
continue;
}
switch (ch)
{
case 'A':
case 'a':
if (st.isfull())
cout<<"stack already full\n";//检测类内部数组是否溢出
else
{
get_customer(po);//读取输入存入po
st.push(po);//将po直接赋值推入类对象st的结构数组中
}
break;
case 'P':
case 'p':if (st.isempty())//检测类内部数组是否已空
cout<<"stack already empty\n";
else
{
st.pop(po);//将类对象st结构数组中上一个结构重新赋值还给po
paymentx+=po.payment;//计算累加
cout<<"Fullname: "<0)
{
item=items[--top];
return true;
}
else
return false;
}
void get_customer(Item& cm)
{
using std::cout;
using std::cin;
using std::endl;
cout<<"Please enter name: "<>cm.payment;
cin.get();
}
//PP10.10.6
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);
};
Move::Move(double a,double b)
{
x=a;
y=b;
}
void Move::showmove() const
{
std::cout<<"X= "<
class Plorg
{
private:
char Fullname[20];
int CI;
public:
Plorg(const char* fn,int c);
Plorg();
~Plorg();
void change_CI(int c);
void show_Plorg() const;
};
Plorg::Plorg(const char* fn,int c)
{
strcpy(Fullname,fn);
CI=c;
}
Plorg::Plorg()
{
strcpy(Fullname,"Plorga");
CI=50;
}
Plorg::~Plorg()
{
}
void Plorg::change_CI(int c)
{
CI=c;
}
void Plorg::show_Plorg() const
{
std::cout<<"Fullname: "<
#include "Z_Head.h"
List::List()
{
count=0;
}
bool List::isempty()
{
return count==0;
}
bool List::isfull()
{
return count==LIMAX;
}
//int List::itemcount()
//{
// return count;
//}
bool List::additem(Item& item)
{
if (count==LIMAX)
return false;
else
{
items[count++]=item;//注意是将显式赋值给隐式,且序号增加
return true;
}
}
void List::visit(void (*pf)(Item&))//通过visit函数,(*pf)才能访问私有数据
{
for (int i=0;i
#include "Z_Head.h"
void showfilm(Item& item);
int main()
{
using namespace std;
List movies;
Item temp;
if (movies.isfull())//确认初始化时分配空间是否足够
{
cout<<"No more room in list.\n";
exit(1);
}
cout<<"Enter first movie title: \n";
while (cin.getline(temp.title,SIZ)&&temp.title[0]!='\0')//输入名称并确保不为空
{
cout<<"Enter your rating:(1-10) "<>temp.rating;
cin.get();
if (!movies.additem(temp))//添加成功则不会执行
{
cout<<"List is full! \n";
break;
}
if (movies.isfull())//添加后确认是否已满
{
cout<<"You have filled the list.\n";
break;
}
cout<<"Enter next movie title:(empty line to quit.) ";
}
if (movies.isempty())//读取完成后确认是否存入了数据
cout<<"No data entered.\n";
else
{
cout<<"Here is the movie list: \n";
movies.visit(showfilm);//showfilm函数作为函数名(函数指针)参数被对象调用
}
cout<<"Bye!\n";
return 0;
}
void showfilm(Item& item)
{
std::cout<<"Movie title: "<