类和对象
C++面向对象的三大特性为:封装、继承、多态
C++认为万事万物皆为对象,对象上有其属性和行为
例如:
人可以作为对象,属性有姓名、年龄、身高…,行为有走、跑、跳…
车可以作为对象,属性有轮胎、方向盘…,行为有载人、放音乐…
具有相同性质的对象,我们可以抽象为类,人属于人类,车属于车类
4.1 封装
4.1.1 封装的意义
封装是C++面对对象的三大特性之一
封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
封装意义一:
在设计类的时候,属性和行为写在一起,表现事物
语法:class 类名{ 访问权限: 属性 / 行为 };
#include <iostream>
using namespace std;
const double pi = 3.14159;
//设计一个圆类,求圆的周长
class Circle
{
//访问权限
//公共权限
public:
//属性
double r;
//行为
//返回圆的周长
double primeter()
{
return 2 * r * pi;
}
//返回圆的面积
double area()
{
return r * r * pi;
}
};
//主函数
int main()
{
//通过圆类创建具体的圆(对象)
//实例化:通过一个类创建一个对象的过程
Circle c1;
c1.r = 1;
cout << "圆的周长为:" << c1.primeter() << endl;
cout << "圆的面积为:" << c1.area() << endl;
return 0;
}
封装意义二:
类在设计时,可以把属性和行为放在不同权限下,加以控制
访问权限有三种:
1.public
**公共权限:**类内可以访问 类外可以访问
2.protected
**保护权限:**类内可以访问 类外不可以访问 子类可以访问父类中的保护权限
3.private
**私有权限:**类内可以访问 类外不可以访问 子类不可以访问父类中的保护权限
class person
{
public:
string p_name;
protected:
string p_car;
private:
int p_password;
public:
void set(string name, string car, int password)
{
p_name = name;
p_car = car;
p_password = password;
}
};
//主函数
int main()
{
person p1;
p1.set("张三", "拖拉机", 123);
cout << p1.p_name << endl;
//cout << p1.p_car << endl;//保护权限类外不可以访问
//cout << p1.p_password << endl;//私有权限类外不可以访问
return 0;
}
4.1.2 struct和class区别
在C++中struct
和class
唯一的区别就在于默认的访问权限不同
区别:
struct
默认权限为公有class
默认权限为私有
class C1
{
int a;//默认权限:私有
};
struct C2
{
int b;//默认权限:公有
};
//主函数
int main()
{
C1 c1;
C2 c2;
//c1.a = 10;//不可访问
c2.b = 30;
return 0;
}
4.1.3 成员属性设置为私有
**优点1:**将所有成员属性设置为私有,可以自己控制读写权限
**优点2:**对于写权限,我们可以检测数据的有效性
class person
{
private:
string p_name;//设置为可读可写
int p_age = 18;//设置为只读不写
string p_lover;//设置为只写不读
public:
//设置名字可写接口
void setName(string name)
{
p_name = name;
}
//设置名字可读接口
void showName()
{
cout << "姓名:" << p_name << endl;
}
//设置年龄只读接口
void showAge()
{
cout << "年龄为:" << p_age << endl;
}
//设置爱人只写接口
void setLover(string lover)
{
p_lover = lover;
}
};
//主函数
int main()
{
person p1;
p1.setName("张三");
p1.setLover("桃子女士");
p1.showName();
p1.showAge();
return 0;
}