C++学习(8)—— 封装

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

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

具有相同性质的对象,可以抽象为类

1. 封装的意义

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

封装的意义:

  • 将属性和行为作为一个整体,表现生活中的事物
  • 将属性和行为加以控制
  1. 封装意义一:

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

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

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

#include<iostream>
using namespace std;

//圆周率
const double PI = 3.14;

//设计一个圆类,求圆的周长
//圆求周长的公式:2*PI*半径
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;

    return 0;
}

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

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

class Student{
    //访问权限
public:
    string s_name;
    string s_id;

    void showStudent(){
        cout << "姓名:" << s_name << "\n学号:" << s_id << endl;
    }

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

int main(){
    //实例化对象
    Student s1;
    //s1.s_name = "张三";
    s1.setName("张三");
    s1.s_id = "001";

    s1.showStudent();

    Student s2;
    s2.s_name = "李四";
    s2.s_id = "002";

    s2.showStudent();

    return 0;
}
  1. 封装意义二:

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

访问权限有三种:

  • public 公共权限
  • protected 保护权限
  • private 私有权限
#include<iostream>
#include<string>
using namespace std;

// public     公共权限  成员 类内可以访问,类外可以访问
// protected  保护权限  成员 类内可以访问,类外不可以访问  子类可以访问父类的保护内容
// private    私有权限  成员 类内可以访问,类外不可以访问  子类不可以访问父类的保护内容

class Person{
public:
    string m_Name; //姓名

protected:
    string m_car;  //汽车

private:
    int m_Password;  //银行卡密码

public:
    void func(){
        m_Name = "张三";
        m_car = "奔驰";
        m_Password = 123456;
    }
};

int main(){
    Person p1;

    p1.m_Name = "李四";
    //p1.m_car = "宝马";
    //p1.m_Password = 123;

    return 0;
}

2. struct和class区别

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

区别:

  • struct默认权限为公共
  • class默认权限为私有
#include<iostream>
#include<string>
using namespace std;

class C1{
    int m_A;
};

struct C2{
    int m_A;
};

int main(){
    C1 c1;
    //c1.m_A = 100;
    C2 c2;
    c2.m_A = 200;

    return 0;
}

3. 成员属性设置为私有

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

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

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

class Person{
public:
    //写姓名
    void setName(string name){
        m_Name = name;
    }
    //读姓名
    string getName(){
        return m_Name;
    }
    //读年龄
    int getAge(){
        return m_Age;
    }
    //写年龄————————有效性验证
    void setAge(int age){
        if(age < 0 || age > 150){
            cout << "年龄范围错误" << endl;
            return ;
        }
        m_Age = age;
    }
    //写爱人
    void setLover(string name){
        m_Lover = "NoBody";
    }

private:
    string m_Name;   //姓名 可读可写
    int m_Age = 20;    //可读可写,但范围必须在0~150之间
    string m_Lover;   //只写
};

int main(){
    Person p;
    p.setName("张三");

    cout << "姓名为:" << p.getName() << endl;


    return 0;
}
posted @ 2019-12-08 22:01  马尔尤尤  阅读(239)  评论(0编辑  收藏  举报