类与对象
c++面向对象的三大特征为:封装、继承、多态
c++认为万事万物都皆为对象,对象上有其属性和行为
例如:
人可以作为对象,属性有姓名、年龄、身高、体重……,行为有 唱、跳……
车也可以作为对象、属性有轮胎、方向盘……行为有载人、空调、音乐
具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类
封装
封装的意义
封装是c++面向对象三大特征之一
封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
封装意义一:
在设计类的时候,属性和行为写在一起,表现十五
语法:class 类名 {访问权限:属性/行为};
示例一:设计一个圆类,求圆的周长
#include<iostream>
using namespace std;
const double PI = 3.14;
//设计一个圆类,求圆的周长
//圆求周长的公式:2*PI*半径
//class代表设计一个类 ,后面是名称
class yuan
{
//访问权限
//公共权限
public:
//属性
int m_r;
//行为
//获取圆的周长
double calculate()
{
return 2*PI*m_r;
}
};
int main(void)
{
//通过圆类创建具体的圆(对象)
yuan y1; //实例化
//给对象赋值
y1.m_r = 10;
cout<<"圆的周长为: "<<y1.calculate()<<endl;
system("pause");
return 0;
}
示例二
设计一个学生类,属性有姓名和学号,可以给姓名和学号复制,可以显示学生的姓名和学号
#include <iostream>
#include <string>
using namespace std;
// 设计一个学生类,属性有姓名和学号,可以给姓名和学号复制,可以显示学生的姓名和学号
// 设计学生类
class student
{
public: // 公共权限
// 属性
string m_name; // 姓名
int m_id; // 学号
// 行为
// 显示姓名和学号的函数
void show_student()
{
cout << "姓名: " << m_name << endl
<< "学号: " << m_id << endl;
}
};
int main(void)
{
//创建一个具体的学生
//实例化
student s1;
//给s1赋值
s1.m_name = "张三";
s1.m_id = 1;
//显示
s1.show_student();
system("pause");
return 0;
}
还有一种赋值的方法
#include <iostream>
#include <string>
using namespace std;
// 设计一个学生类,属性有姓名和学号,可以给姓名和学号复制,可以显示学生的姓名和学号
// 设计学生类
class student
{
public: // 公共权限
// 属性
string m_name; // 姓名
int m_id; // 学号
// 行为
// 显示姓名和学号的函数
void show_student()
{
cout << "姓名: " << m_name << endl
<< "学号: " << m_id << endl;
}
//给姓名和学号赋值的函数
void set_name(string name)
{
m_name = name;
}
void set_id(int id)
{
m_id = id;
}
};
int main(void)
{
//创建一个具体的学生
//实例化
student s1;
//给s1赋值
s1.set_name("张三");
s1.set_id(1);
//显示
s1.show_student();
system("pause");
return 0;
}
类中的属性和行为,我们统一称为成员
属性 成员属性 成员变量
权限
类在设计时,可以把属性放在不同权限下,加以控制
访问权限有三种
- public 公共权限 类内 类外都可访问
- protected 保护权限 只有类内可以访问 不过儿子可以访问父亲保护的内容
- private 私有权限 只有类内可以访问 儿子也不可以访问
#include<iostream>
using namespace std;
class person
{
//公共权限
public:
string m_name;
//保护权限
protected:
string m_car;
//私有权限
private:
int m_password;
public:
void func01()
{
m_name = "张三";
m_car = "梅奔";
m_password = 114514;
}
};
int main(void)
{
person p1; //实例化一个具体对象
p1.m_name = "李四";
// p1.m_car = "拖拉机"; //保护权限的内容在类外访问不到
// p1.m_password = 123;// 私有权限类外也访问不到
system("pause");
return 0;
}
struct和class区别
在c++中struct和class唯一的区别就在于默认的访问权限不同
区别
- struct默认权限为公共
- class默认权限为私有
成员属性设置为私有
优点1 将所有成员的属性设置为私有,可以自己控制读写权限
有点2 对于写权限,我们可以检测数据的有效性
#include<iostream>
#include<string>
using namespace std;
//成员属性设置为私有
//人类
class people
{
public:
//设置姓名
void setNmea(string name)
{
m_name = name;
}
//获取姓名
string getName()
{
return m_name;
}
//获取年龄
int setAge()
{
return mage;
}
//设置年龄0~150
void setAg(int age)
{
if(age < 0 || age > 150)
{
cout<<"奇迹,赋值失败"<<endl;
return;
}
mage = age;
}
//设置偶像
void setIdol(string idol)
{
m_idol = idol;
}
private:
string m_name;//姓名 可读可写
int mage = 18; //年龄 只读 也可以写(0~150之间)
string m_idol;//偶像 只写
};
int main(void)
{
people p1;
//姓名设置
p1.setNmea("张三");
cout<<"姓名: "<<p1.getName()<<endl;
//年龄设置 不可以
//p1.setAge(20);
//年龄获取
p1.setAg(15);
cout<<"年龄: "<<p1.setAge()<<endl;
//偶像设置
p1.setIdol("小明"); //访问不到
system("pause");
return 0;
}
封装先讲到这吧,再会