C++ 封装(一)

一、什么是封装

封装是面向对象编程中的一种重要概念,它指的是将数据和操作数据的方法封装在一个类中,并对外部隐藏对象的内部实现细节,只提供公共的接口供外部访问。

在C++中你需要创建一个类,将数据成员和成员函数封装在类的内部。可以使用访问控制权限修饰符(public、private、protected)来控制成员的访问权限,一般情况下,数据成员应该定义为私有(private),并提供公共的成员函数(公有成员函数)来访问和修改这些数据成员。这样就实现了数据封装,外部只能通过公共接口来操作数据,而不需要了解内部实现细节。通过封装,可以将类的实现细节和数据隐藏起来,提高代码的安全性和可维护性。

对象代表什么,就得封装对应的数据,并提供数据对应的行为

二、主要关键字

被private修饰的,表示私有,只能在本类中才能使用,不能被类外代码访问;

提供“set变量名(参数)”函数,用于给成员变量赋值,函数用public修饰 提供“get变量名()”函数,用于获取成员变量的值,函数用public修饰

被public修饰的,表示公共的,在所有的地方都能使用;

被protected修饰的,表示受保护,在本类及其派生类中访问,不能被其它类外代码直接访问。

代码示例:使用封装给写入学生信息

#include <iostream>
#include <string>
using namespace std;
class Student{
    private:
        string name;
        int age;
        double score;
    public:
        string getName(){
            return name;
        }
        void setName(string n)
        {
            name = n;
        }
        double getScore()
        {
            return score;
        }
        void setScore(double s)
        {
            if(s >= 0 && s <= 100)
            score = s;
            else{
                cout<<"对不起,分数不合理,赋值失败!"<<endl;
            }
        }

};

int main()
{
    Student stu;
    stu.setName("gaoyinjie");
    stu.setScore(120);//超过赋值范围,无法赋值。如果用户没有设置构造函数,输出值不确定。
    cout<<"学生姓名:"<<stu.getName()<<endl;
    cout<<"学生成绩:"<<stu.getScore()<<endl;
}

运行结果:

对不起,分数不合理,赋值失败!
学生姓名:gaoyinjie
学生成绩:6.95212e-310

三、this关键字

在封装中,this关键字用于引用当前对象的实例。通过this关键字,可以区分对象的实例变量和方法中的局部变量,确保正确地访问和操作对象的属性。同时,this关键字也可以用于在构造方法中调用其他构造方法,实现构造方法的重载和复用。

一般来说,封装中的变量都适用于就近原则。

如果在封装中,存在相同变量名的变量,如果要运行该函数,首先运行函数中(局部变量)的变量。

代码示例:

#include <iostream>
#include <string>

using namespace std;

class GirlFriend{
private:
    int age = 20;//成员变量
public:
    void method()
    {
        //局部变量
        int age = 10;
        cout<<age<<endl;
    }
};

int main()
{
    GirlFriend gf;
    gf.method();

    return 0;
}

运行结果:10

如果要运行成员变量(不管在private还是在public中),需要加this关键字。

代码示例:

#include <iostream>
#include <string>

using namespace std;

class GirlFriend{
private:
    // int age = 30;
public:
    int age = 200;
    void method()
    {
        int age = 10;
        cout<<this->age<<endl;
    }    
};

int main()
{
    GirlFriend gf;
    gf.method();
    return 0;
}

运行结果:200

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值