类与对象

c++面向对象的三大特征为:封装、继承、多态

c++认为万事万物都皆为对象,对象上有其属性和行为

例如:

​ 人可以作为对象,属性有姓名、年龄、身高、体重……,行为有 唱、跳……

​ 车也可以作为对象、属性有轮胎、方向盘……行为有载人、空调、音乐

​ 具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类

封装

封装的意义

封装是c++面向对象三大特征之一

封装的意义:

封装意义一:

在设计类的时候,属性和行为写在一起,表现十五

语法:class 类名 {访问权限:属性/行为};

示例一:设计一个圆类,求圆的周长

#include<iostream>
using namespace std;

const double PI = 3.14;
//设计一个圆类,求圆的周长
//圆求周长的公式:2*PI*半径

//class代表设计一个类 ,后面是名称
class yuan
{
    //访问权限
    //公共权限
    public:

    //属性
    int m_r;
    
    //行为
    //获取圆的周长
    double calculate()
    {
        return 2*PI*m_r;
    }

};

int main(void)
{
    //通过圆类创建具体的圆(对象)
    yuan y1; //实例化
    
    //给对象赋值
    y1.m_r = 10;

    cout<<"圆的周长为: "<<y1.calculate()<<endl;

    system("pause");
    return 0;
}

示例二

设计一个学生类,属性有姓名和学号,可以给姓名和学号复制,可以显示学生的姓名和学号

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

// 设计一个学生类,属性有姓名和学号,可以给姓名和学号复制,可以显示学生的姓名和学号

// 设计学生类
class student
{
public: // 公共权限
    // 属性
    string m_name; // 姓名
    int m_id;      // 学号

    // 行为

    // 显示姓名和学号的函数
    void show_student()
    {
        cout << "姓名: " << m_name << endl
        << "学号: " << m_id << endl;
    }
};

int main(void)
{
    //创建一个具体的学生
    //实例化
    student s1;
    //给s1赋值
    s1.m_name = "张三";
    s1.m_id = 1;

    //显示
    s1.show_student();

    system("pause");
    return 0;
}

还有一种赋值的方法

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

// 设计一个学生类,属性有姓名和学号,可以给姓名和学号复制,可以显示学生的姓名和学号

// 设计学生类
class student
{
public: // 公共权限


    // 属性
    string m_name; // 姓名
    int m_id;      // 学号

    // 行为
    // 显示姓名和学号的函数
    void show_student()
    {
        cout << "姓名: " << m_name << endl
        << "学号: " << m_id << endl;
    }
    
    //给姓名和学号赋值的函数
    void set_name(string name)
    {
        m_name = name;
    }
    
    void set_id(int id)
    {
        m_id = id;
    }

};

int main(void)
{
    //创建一个具体的学生
    //实例化
    student s1;
    //给s1赋值
    s1.set_name("张三");
    s1.set_id(1);

    //显示
    s1.show_student();

    system("pause");
    return 0;
}

类中的属性和行为,我们统一称为成员

属性 成员属性 成员变量

权限

类在设计时,可以把属性放在不同权限下,加以控制

访问权限有三种

#include<iostream>
using namespace std;

class person
{
    //公共权限
    public:
    string m_name;

    //保护权限
protected:
    string m_car;

    //私有权限
    private:
    int m_password;

    public:
    void func01()
    {
        m_name = "张三";
        m_car = "梅奔";
        m_password = 114514;
    }

};

int main(void)
{
    person p1; //实例化一个具体对象

    p1.m_name = "李四";
    // p1.m_car = "拖拉机"; //保护权限的内容在类外访问不到
    // p1.m_password = 123;// 私有权限类外也访问不到
    
    system("pause");
    return 0;
}

struct和class区别

在c++中struct和class唯一的区别就在于默认的访问权限不同

区别

成员属性设置为私有

优点1 将所有成员的属性设置为私有,可以自己控制读写权限

有点2 对于写权限,我们可以检测数据的有效性

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

//成员属性设置为私有

//人类
class people
{
    public:
    //设置姓名
    void setNmea(string name)
    {
        m_name = name;
    }
    
    //获取姓名
    string getName()
    {
        return m_name;
    }

    //获取年龄
    int setAge()
    {
        return mage;
    }

    //设置年龄0~150
    void setAg(int age)
    {
        if(age < 0 || age > 150)
        {
            cout<<"奇迹,赋值失败"<<endl;
            return;
        }
        mage = age;
    }

    //设置偶像
    void setIdol(string idol)
    {
        m_idol = idol;
    }

    private:

    string m_name;//姓名 可读可写

    int mage = 18; //年龄 只读  也可以写(0~150之间)

    string m_idol;//偶像 只写

};

int main(void)
{
    people p1;
    //姓名设置
    p1.setNmea("张三");
    cout<<"姓名: "<<p1.getName()<<endl;

    //年龄设置 不可以
    //p1.setAge(20);

    //年龄获取
    p1.setAg(15);
    cout<<"年龄: "<<p1.setAge()<<endl;

    //偶像设置
    p1.setIdol("小明");  //访问不到
    

    system("pause");
    return 0;
}

封装先讲到这吧,再会