C++面向对象的三大特性为: 封装、继承、多态
C++认为万事万物都皆为对象对象上有其属性和行为
例如:
人可以作为对象,属性有姓名、年龄、身高、体重…行为有走、跑、跳、吃饭、唱歌…
车也可以作为对象,属性有轮胎、方向盘、车灯…,
行为有载人、放音乐、放空调…
具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类
封装
封装是C++面向对象三大特性之一
封装的意义:
将属性和行为作为一个整体,表现生活中的事物
将属性和行为加以权限控制
封装意义一:
在设计类的时候,属性和行为写在一起,表现事物
语法: class 类名{ 访问权限: 属性 / 行为 };
类中的行为和属性,我们统一称为成员
属性–成员属性、成员变量
行为–成员函数、成员方法
示例1:设计一个圆类,求圆的周长
#include <iostream>
using namespace std;
const double PI=3.14;
//设计一个圆类,求圆的周长
//圆的周长为2*PI*半径
//class代表一个类,后面紧跟的是类名称
class Circle
{
//访问权限
//公共权限
public:
//属性
//半径
int r;
//行为(一般是函数)
//获取圆的周长
double zc()
{
return 2*PI*r;
}
};
int main()
{
//通过圆类,创建具体的圆
Circle yuan;
//给圆对象的属性赋值
yuan.r=10;
cout<<"圆的周长为"<<yuan.zc()<<endl;
return 0;
}
示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
#include <iostream>
#include <string>
using namespace std;
//设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
class student
{
//访问权限
//公共权限
public:
//属性
//姓名和学号
string name;
int id;
//行为(一般是函数)
//显示姓名和学号
void showidname()
{
cout<<"姓名为"<<name<<endl;
cout<<"学号为"<<id<<endl;
}
};
int main()
{
student stu;
stu.id=10086;
stu.name="李明";
stu.showidname();
return 0;
}
封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制访问权限有三种
- public 公共权限 ,类外可以访问,类内可以访问
- protected 保护权限 ,类外不可以访问,类内可以访问, 儿子可以访问父亲中的保护内容
- private 私有权限 ,类外不可以访问,类内可以访问 , 儿子不可以访问父亲中的私有内容
示例:
#include <iostream>
#include <string>
using namespace std;
class persion
{
//访问权限
public:
string name;
protected:
string car;
private:
int card;
public:
void fun()
{
name="李三";//name是公共类,类内可以访问
car="劳斯莱斯";//car是保护类,类内可以访问
card=1008611;//card是私有类,类内可以访问
cout<<name<<endl;
cout<<car<<endl;
cout<<card<<endl;
}
};
int main()
{
persion fa;
fa.fun();
persion er;
er.name="王五";//name是公共类,类外可以访问
//er.car="奔驰";//car是保护类,类外不可以访问
//er.card=1008613;//card是私有类,类外不可以访问
return 0;
}
struct和class区别:
在C++中 struct和class唯一的区别就在于 默认的访问权限不同
区别:
struct 默认权限为公共
class 默认权限为私有
示例:
#include <iostream>
#include <string>
using namespace std;
class sty
{
int a;
};
struct sto
{
int b;
};
int main()
{
sty scc;
//scc.a=100;//这里内外不能访问class类,因为如果没设置公共、保护、私有,则默认全为私有
sto scb;
scb.b=100;//struct默认为公共类,可以访问
return 0;
}
成员属性设置为私有:
优点1: 将所有成员属性设置为私有,可以自己控制读写权限
优点2: 对于写权限,我们可以检测数据的有效性
示例:
#include <iostream>
#include <string>
using namespace std;
class person
{
public:
//设置姓名
void setname(string ming)
{
name=ming;
}
//获取姓名
string getname()
{
return name;
}
//读取年龄
int getage()
{
return age;
}
//获取等级
void setlevel(char deng)
{
level=deng;
}
private:
string name;//可读可写姓名
int age=18;//只读年龄
char level;//只写等级
};
int main()
{
person fa;
fa.setname("李四");
cout<<"姓名为"<<fa.getname()<<endl;
cout<<"年龄为"<<fa.getage()<<endl;
fa.setlevel('A');
return 0;
}