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