面向对象程序设计之一

面向对象程序设计之一


本文是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();
}
分析
  1. 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值