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

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

封装的意义

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

封装意义一:

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

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

//实例1:设计一个圆类,求圆的周长
#include <iostream>
using namespace std;

//圆的周长公式:2 * PI * 半径
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;
    return 0;
}

封装意义二:

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

  访问权限有三种:

    1. public  公共权限
    2. protected  保护权限
    3. 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.func();
    //p1.m_Car = "奔驰"; 报错 protected类外无法访问  
    //p1.m_Password = 654321;  报错 private 类外无法访问 
}

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 = 100; //可以访问 
}

成员属性设置为私有

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

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

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

class Person {
public:
    //设置姓名
    void setName(string name) {
        m_Name = name;
    }
    //获取姓名 
    string getName() {
        return m_Name;
    }
    //获取年龄 如果想修改(年龄的范围必须是0 - 150之间) 
    int getAge() {
        return m_Age;
    } 
    void setAge(int age) {
        m_Age = 0; //初始化年龄为0 
        if (age < 0 || age > 150) {
            cout << "输入的年龄有误" << endl;
            return;
        }
        else 
            m_Age = age; 
    }
    //设置情人
    void setLover(string lover) {
        m_Lover = lover;
    }
    
private:
    //姓名 可读可写 
    string m_Name; 
    //年龄 可读可写 
    int m_Age;
    //情人 只写 
    string m_Lover;
};

int main() {
    Person p;
    p.setName("张三");
    cout <<  "姓名为:" << p.getName() << endl;
    
    //p.m_Age = 18;  报错 无法直接设置
    p.setAge(151);
    cout <<  "年龄为:" << p.getAge() << endl;
    
    p.setLover("233");//写入情人 
    //cout <<  "情人为:" << p.m_Lover << endl;    报错 无法获取情人 
}