C++类

为什么引入类

在这之前,先思考以下问题:

  • 为什么要引入数组?
    同一类型的变量太多了
  • 为什么要引入函数?
    结构化程序设计:功能分解,代码重用
  • 为什么要引入指针?
    加快速度、参数传递、动态分配内存
  • 为什么要引入结构体?
    复合数据结构,不同数据类型的聚合在一起

类:

  • 采用人们认识客观世界的自然方式去模拟客观世界中对象。
    将客观世界中的实体完整性的描述(即数字化)
  • 提高开发程序的效率和可靠性
    数据与代码的聚合(以便更高级的代码复用)

面向过程程序设计和 面向对象程序设计

  • 面向过程程序设计(Structured Programming)
    1,以功能为中心,通过分解功能,采用函数来描述操作,使用不同的函数来完成不同的子功能,之后相互调用,完成任务;
    2,数据与函数分离,数据(类型或结构)一旦发生改变,函数也要相应改变
  • 面向对象程序设计(Object Oriented Programming)(也称OOP)
    1,以数据为中心,采用对象来描述内部属性和操作方法
    2,将数据和函数当作一个统一体,采用软件对象模拟客观世界中实际对象

类的基本概念

成员

类的成员包括公有成员public、私有成员private、保护成员protected
在每个类型的成员中又可以定义数据成员、函数成员
一般类的函数成员定义为公有成员

公有成员public

类的公有成员用public声明,在类外可以直接通过运算符“.”来访问。

  • 一般函数成员被定义为公有成员;
  • 在公有成员中的函数成员中可以访问类的私有、保护成员中的数据成员
  • 通过调用公有函数成员实施规定的操作
  • 外界与类之间起着接口的作用

私有成员private

外界(类外)不能够直接访问该成员

  • 一般数据成员被定义为私有成员
  • 使得成员被封装隐藏起来,外界不能随便修改对象的私有数据成员
  • 只有通过类中公有函数对数据进行修改,达到数据的安全性

保护成员protected

外界部分区域能够访问该成员。换句话说,某些数据或函数成员在类外可以被有限制的访问。

#include <iostream>

using namespace std;

class Date//定义一个日期date类
{
public:
    int year,month;//将年、月定义为public共有成员
    void setdate(int _year,int _month,int _day)//在public中又定义了一个函数,可以用于给对象赋值
    {
        year=_year;
        month=_month;
        day=_day;  //注意,在同一个类中,可以通过public中的函数,访问、修改private成员
    }
    void showdate()//定义了一个打印日期的public成员函数
    {
        printf("%d年%d月%d号",year,month,day);
    }
private:
    int day;//将日期定义为私有private成员
};

int main()
{
    Date temp;//创建了一个Date类的对象temp
    temp.setdate(2021,1,13);//使用"."运算法调用Date类的setdate函数,对temp中的对象进行赋值
    temp.showdate();//使用"."运算法调用Date类的showdate函数,打印日期
    return 0;
}
//运行结果:
2021113

实例分析

在上述事例中,定义了一个类Date,在类中定义了public、private成员,在public中可以访问、修改private、protected成员中的数据。

三者区别:

私有是对外界完全封闭,公有是完全开放,保护是介于两者之间

稍微进阶

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

class Fraction//定义一个分数类
{
private:
    int down;//将分母定义为私有成员
public:
    int up;//将分子up定义为公有成员
    void setdata(int a,int b)//在Fracion类中定义了一个setdata函数,
    {                        //用于给对象赋值
        up = a;              //注意:在同一个类中,公有成员中的函数可以访问、修改私有成员
        down = b;
    }
    void showdown()//定义了一个打印函数showdown,用于打印对象的分母。
    {
        cout<<down;
    }

};
class real:public Fraction//定义了一个real实数类,且继承了Fraction类的公有和保护成员
{
public:
    void showdata()//定义了一个公有成员,为一个函数,用于打印分母;
    {
        cout<<down;
    }
};

int main()
{
    real r;//定义了一个real实数类的对象r
    r.setdata(4,5);//调用继承的Fraction类中的setdata成员,为对象赋值
    r.showdata();//使用real类中的公有成员showdata,输出对象r的分子
    return 0;
}

上述实例中,定义了一个分数Fractiion类、一个实数real类,并且real继承了Fraction类的public、protected成员。
在real中定义了一个打印函数,放在了real的public中,企图打印出来对象的分母,但是在Fraction类中,分母被定义为了一个private成员,是Fraction类的私有成员,是不能被继承的,所以会报错。

C:\Users\xxx\Desktop\C++\temp\main.cpp|9|error: ‘int Fraction::down’ is private

提示down是私有的成员,不可被访问,没有继承给real类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值