C++核心编程 4 类和对象-封装

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

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

 

封装

意义:1、将属性和行为作为一个整体,表现生活中的事物

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

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

复制代码
#include<iostream>
#include<string>
using namespace std;

//设计一个圆类,求圆的周长
//圆周长公式:2 * pai * 半径

const double pai = 3.14;          //圆周率


//class设计一个类,类后面紧跟着的就是类名称
class Circle
{
public:                           //访问权限    公共权限
    int m_r;                      //属性       半径
    double calculateZC()          //行为       获取圆的周长
    {
        return 2 * pai * 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 showStudent()        //行为
    {
        cout << "姓名:" << m_Name <<"  " << "学号:" << m_Id << endl;
    }
};

int main()
{    
    //实例化:
    Student s1;
    s1.m_Name = "张三";
    s1.m_Id = 001;
    s1.showStudent();


    Student s2;
    s2.m_Name = "李四";
    s2.m_Id = 002;
    s2.showStudent();


    system("pause");
    return 0;
}
复制代码

    

    通过行为给属性赋值:

复制代码
#include<iostream>
#include<string>
using namespace std;

class Student                  //类中的属性和行为称为:成员
{
public:                        //属性  又称:成员属性 成员变量
    string m_Name;            
    int m_Id;        

public:                        //行为  又称:成员函数 成员方法
    void showStudent()        
    {
        cout << "姓名:" << m_Name <<"  " << "学号:" << m_Id << endl;
    }
    //给姓名赋值
    void setName(string name)
    {
        m_Name = name;
    }
    //给学号赋值
    void setId(int id)
    {
        m_Id = id;
    }
};

int main()
{    
    //实例化:

    Student s1;
    //s1.m_Name = "张三";
    //s1.m_Id = 001;
    s1.setName("张三");
    s1.setId(1);
    s1.showStudent();

    Student s2;
    //s2.m_Name = "李四";
    //s2.m_Id = 2;
    s2.setName("李四");
    s2.setId(2);
    s2.showStudent();


    system("pause");
    return 0;
}
复制代码

      2、将属性和行为加以权限控制

      访问权限有三种:1、public-公共权限;2、protected-保护权限;3、private-私有权限;

复制代码
#include<iostream>
#include<string>
using namespace std;

//访问权限
//1、public-公共权限         成员 类内可以访问  类外也可以访问
//2、protected-保护权限      成员 类内可以访问  类外不可以访问  子类可以访问父类保护权限内的内容
//3、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;   //私有权限内容,在类外访问不到

    p1.func();

    system("pause");
    return 0;
}
复制代码

 

 

struct和class区别

    在C++中,struct的默认权限为公共,class的默认权限为私有。

复制代码
#include<iostream>
#include<string>
using namespace std;

//class 和 struct  区别

class C1
{
    int m_A;   //默认是私有权限 private
};

struct C2
{
    int m_A;   //默认是公共权限 public
};

int main()
{    
    C1 c1;
    //c1.m_A = 100;     //在class里默认的权限是私有权限 不可访问

    C2 c2;
    c2.m_A = 100;       //在struct里默认的权限是公共权限 可以访问

    system("pause");
    return 0;
}
复制代码

 

成员属性设为私有

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

复制代码
#include<iostream>
#include<string>
using namespace std;

//成员属性设为私有

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



class Person
{
public:
    //写姓名  ->  设置姓名
    void setName(string name)
    {
        m_Name = name;
    }
    //读姓名  ->  获取姓名
    string getName()
    {
        return m_Name;
    }

    //读年龄  ->  获取年龄
    int getAge()
    {
        m_Age = 0;        //初始化为0岁
        return m_Age;
    }

    //写情人  ->  设置情人
    void setLover(string lover)
    {
        m_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(18);            //不可写
    cout << "年龄为:" << p.getAge() << endl;

    p.setLover("仓井");
    //cout << "情人为:" << p.m_Lover << endl;
    //cout << "情人为:" << p.getLover << endl;   //不可以访问
    
    system("pause");
    return 0;
}
复制代码

 

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

复制代码
#include<iostream>
#include<string>
using namespace std;

//成员属性设为私有

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

class Person
{
public:
    //写姓名  ->  设置姓名
    void setName(string name)
    {
        m_Name = name;
    }
    //读姓名  ->  获取姓名
    string getName()
    {
        return m_Name;
    }

    //读年龄  ->  获取年龄
    int getAge()
    {
        m_Age = 0;        //初始化为0岁
        return m_Age;
    }
    //写年龄  ->  设置年龄
    void setAge(int age)
    {
        if (age < 0 || age >150)
        {
            cout << "年龄有误" << endl;
            return;
        }
        m_Age = age;
    }


    //写情人  ->  设置情人
    void setLover(string lover)
    {
        m_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(1000);            
    cout << "年龄为:" << p.getAge() << endl;

    p.setLover("仓井");
    //cout << "情人为:" << p.m_Lover << endl;
    //cout << "情人为:" << p.getLover << endl;   //不可以访问
    
    system("pause");
    return 0;
}
复制代码

 

posted @   大白不会敲代码  阅读(60)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示