面向对象程序设计之一
本文是C++学习笔记系列第二篇文章,接着前一篇从C到C++,本文主要包括的内容有:
- 面向对象程序设计方法
- 类与对象的定义
- 类与类的编译原理
- 对象的构造和析构
- 一个模拟银行账户存取款的例程
- 对象的应用
- 类中的常成员和静态成员
- 类的友元
内容提要:
- 两个很有价值的例程(对于初学者)
- 笔记
例程
1.圆类
通过圆类计算圆的周长和面积
#include <iostream>
using namespace std;
class Circle
{
private:
double Area;
double Len;
public:
double r;
double CalcuArea();
double CalcuLen();
};
double Circle::CalcuArea(){
return 3.14*r*r;
}
double Circle::CalcuLen(){
return 2*3.14*r;
}
int main()
{
Circle C1;
cin >> C1.r;
cout << "r: "<<C1.r<<endl;
cout <<"Area: "<<C1.CalcuArea()<<endl;
cout <<"Len: "<<C1.CalcuLen();
}
分析
- C++基本输入输出库 < iostream >, 使用命名空间 std (否则每次调用iostream中的函数都需要使用
std::
来声明命名空间)
#include <iostream>
using namespace std;
2.类的声明,使用class加类名是定义的语法,类中含有数据成员,例如Area、Lens和r,也有函数成员如CalcuArea和CalcuLen;此外每个成员(member)的访问权限是不同的:private是类私有成员,没有对外接口,public是公有成员,可以从外部访问,除了私有成员和公有成员外还有protected保护成员
注意:这里的函数声明并没有声明输入变量,因为函数成员可以直接访问类中的数据成员,数据成员相当于类中的全局变量
class Circle
{
private:
double Area;
double Len;
public:
double r;
double CalcuArea();
double CalcuLen();
};
3.类的实现。函数前面需要声明命名空间,在本代码中类的定义、实现和实例化都是在一个cpp文件中完成的。今后可以将类的定义和实现放在其他文件中
double Circle::CalcuArea(){
return 3.14*r*r;
}
double Circle::CalcuLen(){
return 2*3.14*r;
}
4.组装,创建类的实例,并访问其中的公有数据和函数成员
int main()
{
Circle C1;
cin >> C1.r;
cout << "r: "<<C1.r<<endl;
cout <<"Area: "<<C1.CalcuArea()<<endl;
cout <<"Len: "<<C1.CalcuLen();
}
2.模拟银行账户进行存取款
通过Account类,实现存款取款的等功能函数
#include <iostream>
using namespace std;
class Account{
public:
int Num;
char Name[10];
double money;
void Deposit();
void Withdraw();
void ShowMoney();
};
void Account::Deposit(){
double x;
cout <<"请输入存款金额"<<endl;
cin >> x;
money+=x;
cout << "已存入"<<x<<"元"<<endl;
cout <<"现有余额" <<money<<"元"<<endl;
return;
}
void Account::Withdraw(){
double x;
cout<<"请输入取款金额"<<endl;
cin >>x;
if(x>money){
cout<<"余额不足"<<endl;
}
else{
money -= x;
cout <<"成功取出:"<<x<<"元"<<endl;
cout <<"现余额:"<<money<<"元"<<endl;
}
return;
}
void Account::ShowMoney(){
cout <<"现余额:"<<money<<"元"<<endl;
}
int main(){
Account obj1;
int choice;
cout <<"请按照下列规则输入\n";
cout <<"存款:1\n取款:2\n显示余额:3\n退出:0\n";
cin>>choice;
while(choice){
switch(choice){
case 1: obj1.Deposit();break;
case 2: obj1.Withdraw();break;
case 3: obj1.ShowMoney();break;
default:cout<<"输入不合法,请重新输入\n";
}
cout <<"请按照下列规则输入\n存款:1\n取款:2\n显示余额:3\n退出:0\n";
cin>>choice;
}
return 0;
}
分析
1.类的声明和C++基本库的载入与C++基本命名空间的使用
#include <iostream>
using namespace std;
class Account{
public:
int Num;
char Name[10];
double money;
void Deposit();
void Withdraw();
void ShowMoney();
};
2.类的实现:这里以类的方法Withdraw为例子说明。值得注意的是,因为类的数据元素在类的命名空间中相当于全局变量,这里的函数并不需要传入数据元素money就可以直接访问;方法跟普通的函数类似,里面可以增加输入输出的语句。
void Account::Withdraw(){
double x;
cout<<"请输入取款金额"<<endl;
cin >>x;
if(x>money){
cout<<"余额不足"<<endl;
}
else{
money -= x;
cout <<"成功取出:"<<x<<"元"<<endl;
cout <<"现余额:"<<money<<"元"<<endl;
}
return;
}
4.类的组装:这里采用比较简单的形式,先创建了单个实例,然后通过while循环判断输入是否合法,从而产生存入和取出的循环
Account obj1;
while(choice){
switch(choice){
case 1: obj1.Deposit();break;
case 2: obj1.Withdraw();break;
case 3: obj1.ShowMoney();break;
default:cout<<"输入不合法,请重新输入\n";
}
cout <<"请按照下列规则输入\n存款:1\n取款:2\n显示余额:3\n退出:0\n";
cin>>choice;
}
笔记
大功告成
本文使用的教学课件是中国大学MOOC上 中国农业大学的C++语言程序设计(下)
为了与该MOOC上的章节名保持一致,这里采用了其中的序号(第七章)
因为刚刚开始学,写文章的时候就会发现其实有很多东西其实是不是很明白的。
比如说,1.怎么把类定义放在另外的一个文件中,是保存为cpp文件呢,还是.h文件呢 2.类定义中的函数可以直接输出吗?还是必须要通过访问变量这种形式进行交互呢?3.cpp的类有类似Python的类中自动初始化的函数吗?
看来还得努力加餐饭!
Never mind happiness, do your mission