c++ Primer Plus(习题10.1)
/*第10.1题的头文件*/
/*主要声明一个类*/
#ifndef BANKCOUNT_H
#define BANKCOUNT_H
#include<string>
class Bankcount
{
private:
std::string name;
std::string num;
double balance;
public:
Bankcount(const std::string &n, const std::string &m, double cash=0.0);
void show() const;
void deposit(double cash);
void withdraw(double cash);
};
#endif
/*定义*/
#include<iostream>
#include"bankcount.h"
Bankcount::Bankcount(const std::string &n, const std::string &m, double cash)
{
name = n;
num = m;
balance = cash;
}
void Bankcount::deposit(double cash)
{
balance += cash;
}
void Bankcount::withdraw(double cash)
{
balance -= cash;
}
void Bankcount::show()const
{
using std::cout;
using std::endl;
cout << "Countname: " << name << endl
<< "Countnumber: " << num << endl
<< "Banlance: " << balance << endl;
}
/*真身,需和10.1定义一起编译,且包含头文件bankcount.h*/
#include<iostream>
#include"bankcount.h"
int main()
{
using namespace std;
Bankcount count1=Bankcount{"Saw","3084",20.1};
count1.deposit(100);
count1.withdraw(10);
cout << "Here the result: \n";
count1.show();
return 0;
}
/*测试成功,其他算了*/
c++ Primer Plus(习题10.2)
/*10.2头文件*/
#pragma once
#ifndef PERSON_H
#define PERSON_H
#include<string>
class Person {
private:
static const int LIMT=25;
std::string lname; //名
char fname[LIMT]; //姓
public:
Person() { lname = ""; fname[0] = '\0'; } //记得里面的分号不能少
Person(const std::string &ln, const char *fn="Heyyou");
void show()const; //这个fristname,在前
void Formalshow()const; //这个lastname在前
};
#endif // !PERSON_H
/*10.2定义,隐藏数据用的*/
#include<string>
#include<iostream>
#include<cstring>
#include"Person.h"
Person::Person(const std::string &ln, const char*fn) //定义不用加那个啥默认参数
{
lname = ln;
strcpy(fname,fn);
}
void Person::show()const
{
std::cout << "Name: " << fname
<< "," << lname << "\n";
}
void Person::Formalshow()const
{
std::cout << "Dear: " << lname
<< "," << fname << "\n";
}
#include<iostream>
#include"Person.h"
int main()
{
using namespace std;
Person one;
Person two("Smythecraft");
Person three("Bimwiddy", "sam");
one.show();
one.Formalshow();
two.show();
two.Formalshow();
three.show();
three.Formalshow();
return 0;
}
c++ Primer Plus(习题10.3)
c++ Primer Plus(习题10.4)
//重新编写的golf类
#ifndef GOLFCLASS_H
#define GOLFCLASS_H
#include<iostream>
class Golf
{
private:
char fullname[40]; //不用作用域为类的常量了
int handicap;
public:
Golf(char *name = "no name", int hc = 0);
void setgolf(const char*name, int hc);
void sethand(int n);
void show()const;
};
#endif // !GOLFCLASS_H
#include"golfclass.h"
Golf::Golf(char*s,int hc)
{
std::strcpy(fullname, s);
handicap = hc;
}
void Golf::setgolf(const char*name, int hc) //用于重新设置对象的值
{
std::strcpy(fullname, name);
handicap = hc;
}
void Golf::sethand(int n) //重新设置hanghip的值
{
handicap = n;
}
void Golf::show()const
{
std::cout << "Fullname: " << fullname << std::endl
<< "Handicap: " << handicap << std::endl;
}
//题目感觉理解错了,setgolf和sethand应该返回一个对象
//凑合着用着
//这题运行时出现,对象被重复引用,编译器发神经了
#include"golfclass.h"
#include<iostream>
int main()
{
using namespace std;
cout << "Show default value:\n";
Golf a;
a.show();
//重新设置a
a.setgolf("Saw", 100);
cout << "After set golf:\n";
a.show();
cout << "Only set hangdicap:\n";
a.sethand(66);
a.show();
cout << "Bye!\n";
return 0;
}
c++ Primer Plus(习题10.5)
/*10.5题目头文件,创建一个包含结构的类*/
#pragma once
#ifndef CUSTOMER_H
#define CUSTOMER_H
typedef struct customer
{
char fullname[30];
double payment;
}Item;
class Customer {
private:
static const int NUM = 3;
Item items[NUM];
int top;
double total;
public:
Customer();
bool isfull()const;
bool isempty()const;
bool push(const Item&item);
bool pop(Item&item);
void showtotal()const; //用来显示卖家的总收入
};
#endif // !CUSTOMER_H
/*包含头文件Customer.h*/
#include"Customer.h"
#include<iostream>
Customer::Customer() //一个空的栈
{
total = 0;
top = 0;
}
bool Customer::isfull()const {
return top ==NUM;
}
bool Customer::isempty()const {
return top == 0;
}
bool Customer::push(const Item &item)
{
if (top < NUM)
{
items[top++] = item;
return true;
}
else
return false;
}
bool Customer::pop(Item &item)
{
if (top > 0)
{
item = items[--top];
total += item.payment;
return true;
}
else
return false;
}
void Customer::showtotal()const
{
std::cout<< "***total***" <<total<< "***my income.***\n";
}
/*这题更多的是书上的stack,adt接口书上已经写好了*/
#include<iostream>
#include"Customer.h"
#include<ctype.h>
int main()
{
using namespace std;
Customer st; //创建一个空栈
char ch;
Item temp;
cout << "Please enter A to add a customer name and payment,\n"
<< "D to delete a customer,or Q to exit.\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 << "Customer name: ";
cin.getline(temp.fullname, 30);
cout << "Paymeng: ";
cin >> temp.payment;
if (st.isfull())
cout << "stack is full!\n";
else
st.push(temp);
break;
case'd':
case'D':
if (st.isempty())
cout << "stack already empty.\n";
else
{
st.pop(temp);
cout << "Customer " << temp.fullname << " been delete!\n";
st.show();
}
break;
}
cout << "Please enter A to add a customer name and payment,\n"
<< "D to delete a customer,or Q to exit.\n";
}
cout << "Bye!\n";
return 0;
}
c++ Primer Plus(习题10.6)
/*10.6头文件*/
#pragma once
#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; //返回一个Move对象,且要加上提供的m对象的值
void reset(double a = 0, double b = 0);
};
#endif // !MOVE_H
#include"move.h"
#include<iostream>
Move::Move(double a, double b)
{
x = a;
y = b;
}
Move Move::add(const Move &m)const
{
Move temp; //使用一个临时的对象,不知道可不可以
temp.x+=x+m.x;
temp.y= y+m.y;
return temp;
}
void Move::showmove()const
{
std::cout << "X=" << x
<< " Y= " << y << std::endl;
}
void Move::reset(double a,double b)
{
x = a;
y = b;
}
/*简单的类的使用*/
#include<iostream>
#include"move.h"
int main()
{
using namespace std;
Move a,c;
Move b = Move(1.1, 2.5);
c=a.add(b);
cout << "b source: ";
b.showmove();
cout << "After reset: ";
b.reset(); //重置b的x和y为零
b.showmove();
cout << "a source :";
a.showmove();
cout << "c is a+b :";
c.showmove();
return 0;
}
c++ Primer Plus(习题10.7)
#pragma once
#pragma execution_character_set("utf-8")
//本文件为utf-8编码格式
#ifndef PLOGE_H
#define FLOGE_H
class Ploge
{private:
enum { LQ = 19 };
char name[LQ];
int ci;
public:
Ploge(const char *n = "Plorg", int num = 0); //默认构造函数
void setCI(int num);
~Ploge() {};
void show()const;
};
#endif // !PLORG_H
#include<iostream>
#include"ploge.h"
Ploge::Ploge(const char *nm, int num)
{
std::strcpy(name, nm);
ci = num;
}
void Ploge::setCI(int num) //重新设置CI的值
{
ci = num;
}
void Ploge::show()const
{
using std::cout;
using std::endl;
cout << "Name: " << name << endl
<< "CI: " << ci << endl;
}
#include<iostream>
#include"ploge.h"
int main()
{
using namespace std;
Ploge a;
a.show();
Ploge b("Saw", 100);
a = b;
a.show();
b.setCI(0);
b.show();
return 0;
}
c++ Primer Plus(习题10.8)
//
#pragma once
#pragma execution_character_set("utf-8")
//本文件为utf-8编码格式
#ifndef LISTCLASS_H
#define LISTCLASS_H
typedef int Item;
class List
{
private:
static const int NUM=5;
Item items[NUM];
int couts; //计数
public:
List(int couts = 0); //默认为空列表
int report() { return couts; }
bool push(Item &item);
bool pop(Item &item);
bool isempty() { return couts == 0; }
bool isfull() { return couts == NUM; }
void visit(void(*pf)(Item &items)); //用函数指针
};
void show(Item &items); //对每一项进行显示
void change(Item &items); //对每一项进行重置
#endif // !LISTCLASS_H
#include<iostream>
#include"listclass.h"
//类外的函数
void show(Item &items)
{
std::cout << items<<" ";
}
void change(Item &items)
{
using std::cin;
using std::cout;
using std::endl;
cout << "\nEnter change value for every items: ";
Item temp;
cin >> temp;
items = temp;
cout << "Change success!\n";
}
//类的方法
List::List(int a)
{
couts = 0;
}
bool List::push(Item &item)
{
if (isfull())
{
std::cout << "List is full!\n";
return false;
}
items[couts++] = item;
std::cout << item << " push in list.\n";
return true;
}
bool List::pop(Item &item)
{
if (isempty())
{
std::cout << "List is empty!\n";
return false;
}
item=items[--couts];
std::cout << item << " pop out list.\n";
return true;
}
void List::visit(void(*pf)(Item &items))
{
for (int i = 0; i < couts; i++)
pf(items[i]); //调用函数
}
//这题要自己设计类,参考了别人的代码,本人也有点迷惑
//这是实现文件,成功在此
//一看别人的代码,思想也跟着别人走了,这很搞笑
#include<iostream>
#include"listclass.h"
int main()
{
using namespace std;
int i = 0;
List a;
cout << "Test isempty.\n";
if (a.isempty())
cout << "OK!\n";
else
cout << "Try again.\n";
List b;
int temp[5];
while (!b.isfull())
{
cout << "Enter #" << i+1 << " item:";
cin >> temp[i];
b.push(temp[i]);
i++;
}
b.visit(show);
b.visit(change);
b.visit(show); //下面的仅供娱乐
cout << "Extra test,for pop method.\n ";
i = 0;
while (!b.isempty())
{
b.pop(temp[i]);
i++;
}
cout << "Test complete!\n";
return 0;
}
快过年年了,还有六天,要把旧的知识和习题清理一下,准备新课程