C++面向对象的三大特性为封装、继承、多态
C++认为万事万物都皆为对象,对象有其属性和行为
例如:
人可以作为对象,属性有姓名、年龄、身高、体重...,行为有走、跑、跳、吃饭、唱歌...
车也可以作为对象,属性有轮胎、方向盘、车灯....行为有载人、放音乐、开空调...
具有相同性质的对象,我们可以抽象称为类。人属于人类,车属于车类。
封装
意义
封装是C++面向对象三大特性之一
封装意义一
①将属性和行为作为一个整体
②将属性和行为加以权限控制
例1:创建一个圆类,求圆的周长。
#include <bits/stdc++.h>
using namespace std;
//圆周率
const double pi = 3.14;
//class代表设计一个类,后面是类名。
class circle {
//访问权限
public:
//公共权限
//属性
int r; //半径
//行为 函数
double calculate() //获取圆的周长
{
return 2 * pi * r;
}
};
int main() {
//通国圆类 创建具体的圆(对象)
circle c;
//给圆对象的属性进行赋值
c.r = 10;
cout << "圆的周长为:" << c.calculate() << endl;
//62.8
return 0;
}
例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
#include <bits/stdc++.h>
using namespace std;
class student {
public:
//公共权限
//属性
string name;//姓名
int id;//学号
//行为
//显示姓名和学号;
void show()
{
cout << "姓名:" << name << endl << "学号:" << id << endl;
}
//修改姓名
void setname(string n)
{
name = n;
}
//修改学号
void setid(int i)
{
id = i;
}
};
int main() {
//创建一个学生 实例化对象
student s;
//给s对象进行属性赋值操作
s.setname("张三");
s.setid(1);
//显示学生信息
s.show();
return 0;
}
注:类中的属性和行为,我们统一称为:成员
属性又称为成员属性、成员变量
行为又称为成员函数、成员方法
封装意义二
类在设计时,可以把属性和行为放在不同的权限下,加以控制。
访问权限有三种
1. public 公共权限 成员在类内可以访问,类外可以访问。
2. protected 保护权限 成员在类内可以访问,类外不可以访问。 (儿子可以访问)
3. private 私有权限 成员在类内可以访问,类外不可以访问。 (儿子不可以访问)
class preson {
//公共权限
public:
string name; //姓名
//保护权限
protected:
string car; //汽车
//私有权限
private:
string password; //银行卡密码
};
struct和class的区别
在C++中 struct和class唯一的区别就在于 默认的访问权限不同
区别:
struct 默认权限为公共
class 默认权限为私有
#include <bits/stdc++.h>
using namespace std;
class c1 {
int a;
//默认权限是私有
};
struct s1 {
int a;
//默认权限是公共
};
int main() {
c1 c;
c.a = 100;//本行会报错,class默认权限是私有
s1 s;
s.a = 100;//本行不会报错,struct默认权限是公共
return 0;
}
将成员属性设置为私有
优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性
#include <bits/stdc++.h>
using namespace std;
//设计人类
class person {
private:
//姓名 可读可写
string name;
//年龄 可读
int age = 1;
//汽车 可写
string car;
public:
//修改姓名
void setname(string n)
{
name = n;
}
//获取姓名
string getname()
{
return name;
}
//获取年龄
int getage()
{
return age;
}
//修改汽车
string setcar(string c)
{
car = c;
}
};
int main() {
person p;
p.setname("张三");
cout << "姓名:"<< p.getname() << endl;
cout << "年龄:"<< p.getage() << endl;
p.setcar("拖拉机");
return 0;
}