4. 类和对象

概述

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

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

例如

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

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

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

4.1 封装

4.1.1 封装的意义

封装是C++面向对象三大特性之一

封装的意义:

  • 将属性和行为作为一个整体,表现生活中的事物
  • 将属性和行为加以权限控制

封装意义一:

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

语法

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

示例代码1(设计一个圆类,求圆的周长)

# include <iostream>
using namespace std;

const double PI = 3.14;

class Circle
{
    //访问权限

public:                     //公共权限

    int m_r;                //属性(成员属性)

    double calculateZC()    //行为(成员方法)
    {
        return 2 * PI * m_r;

    }

};

int main()
{
    //通过圆类 创建具体的圆(对象)
    //实例化 (通过一个类 创建一个对象的过程)
    Circle c1;
    //给圆对象的属性赋值
    c1.m_r = 10;

    cout << "圆的周长为:" << c1.calculateZC() << endl;

    system("pause");
    return 0;

}

示例代码2

(设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号)

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

class Student
{
public:

    string m_name;
    int m_id;

    void setName(string name)
    {
        m_name = name;
    }

    void setId(int id)
    {
        m_id = id;
    }

    void showStudent()
    {
        cout << "学生的姓名为:" << m_name << endl;
        cout << "学生的学号为:" << m_id << endl;
    }

};

int main()
{
    class Student s1;
    s1.m_id = 12;
    s1.m_name = "yangshen";
    s1.showStudent();

    class Student s2;
    s2.m_id = 21;
    s2.m_name = "zhangkang";
    s2.showStudent();

    class Student s3;
    s3.setId(11);
    s3.setName("xuxin");
    s3.showStudent();

    system("pause");
    return 0;

}

封装意义二:

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

访问权限有三种:

  1. public 公共权限
  2. protected 保护权限
  3. private 私有权限

示例代码

# include <iostream>
using namespace std;

//访问权限
//三种
//公共权限 public     成员   类内可以访问   类外可以访问
//保护权限 protected  成员   类内可以访问   类外不可以访问
//私有权限 privated   成员   类内可以访问   类外不可以访问

class Person
{
    //公共权限
public:
    string m_Name;

    //保护权限
protected:
    string m_Car;

    //私有权限
private:
    int m_Password;

public:
    void func()
    {
        m_Name = "张三";
        m_Car = "比亚迪";
        m_Password = 12345;
    }

};

int main()
{
    Person p1;
    p1.m_Name = "李四";
    //m_Car = "蔚来";               保护权限内容,在类外访问不到
    //p1.m_Password = 12321;        私有权限内容,在类外访问不到

}

易碎

易碎

我看到的今夜的星空,是几万年前的光,我眼中的你是此时的你!

0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注

网站ICP备案皖ICP备2024045222号-1