类和对象
- C++面向对象的三大特性为:封装、继承、多态
- C++认为万物都皆为对象,对象上有属性和行为
例如:
- 人可以作为对象,属性有姓名、年龄、身高、体重....行为有走、跑、跳、吃饭、唱歌....
- 车也可以作为对象,属性有轮胎、方向盘、车灯....行为有载人、放音乐、放空调...
- 具体相同性质的对象,我们可以抽象为类,人属于人类、车属于车类。
一.封装
意义:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
1.意义一:
- 在设计类的时候,属性和行为写在一起,表现事物
- 语法:class 类名(访问权限:属性 / 行为);
-
说明 - 属性:成员属性? ?成员变量
- 行为:成员函数? ?成员方法
? ? 示例:设计一个圆类,求圆的周长
#include<iostream>
using namespace std;
//公式:C=π*半径*2
const double PI = 3.14;
//class 代表设计一个类,类后面紧跟着的是类的名称
class yuan
{
//访问权限;公共权限
public:
//属性--半径
int m_r;
//行为--获取圆的周长(行为通常用函数)
double calculateZC()
{
return 2 * PI * m_r;
}
};
int main()
{
//通过圆类 来创建一个具体的圆(对象)
yuan c;
//给圆对象 的属性进行赋值
c.m_r = 10;
//C=2*PI*10=62,8;
cout << "圆的周长为:" << c.calculateZC() << endl;
system("pause");
return 0;
}
? ? 示例二:
设计一个学生类,属性:姓名和学号(可以给姓名和学号赋值可以显示学生的姓名和学号)
#include<iostream>
using namespace std;
//公式:C=π*半径*2
const double PI = 3.14;
//class 代表设计一个类,类后面紧跟着的是类的名称
class student
{
public://公共权限
//属性
string name;//姓名
int num;//学号
//行为
//显示学生信息
void showstudent()
{
cout << "姓名:" << name <<endl<< "学号:" << num << endl;
}
//输入学生姓名
void setname(string n)
{
name = n;
}
//输入学生学号
void setnum(int m)
{
num = m;
}
};
int main()
{
student A;//创建一个学生
A.name = "张三";//给姓名赋值
A.num = 1;//给学号赋值
A.showstudent();//显示学生信息
student B;
B.setname("李四");//给姓名赋值
B.setnum(2);//给学号赋值
B.showstudent();//显示学生信息
system("pause");
return 0;
}
?2.意义二
- 类在设计时,可以把属性和行为放在不同的权限下,加以控制
- 访问权限有三种
- public? ? ? ? ? 公共权限? ? ?成员? ?类内可以访问? 类外也可以访问
- protected? ? ?保护权限? ??成员? ?类内可以访问? 类外不可以访问? ? ?子可以访问父中保护内容
- private? ? ? ? ?私有权限? ? 成员? ?类内可以访问? 类外不可以访问? ? ?子不可以访问父中私有内容 ? ?
#include<iostream>
using namespace std;
class person
{
public://公共权限
string p_name;//名字
protected://保护权限
string p_car;//汽车
private://私有权限
int p_password;//银行卡密码
public:
void fun()
{
p_name="张三";
p_car = "拖拉机";
p_password = 123456;
}
protected:
void fun1()
{
p_name = "陈无";
p_car = "货车";
p_password = 234567;
}
};
int main()
{
person A;
A.p_name = "李四";
//A.p_car = "奔驰";//保护权限在类外访问不到
//A.p_password = 234567;//私有权限在类外也访问不到
A.fun();
//A.fun1();//保护权限的函数不可以访问
system("pause");
return 0;
}
二.struct和class的区别
在C++中,struct和class唯一区别就是默认访问权限不同
区别:
三.成员属性设置为私有化?
本质就是创建一个借口,接通类外和类内的私有和保护权限
- 优点一:将所有成员属性设置为私有,可以自己控制读写权限
- 优点二:对于写权限,我们可以检测数据的有效性
#include<iostream>
using namespace std;
#include<string>
class person
{
public: //接口:接通类外与类内的保护和隐私权限
//写姓名
void setname(string name)
{
m_name = name;
}
//读姓名
string getname()
{
return m_name;
}
//读年龄
int getnum()
{
m_num = 0;
return m_num;
}
//读爱人
string setlover(string lover)
{
m_lover = lover;
}
private:
string m_name;//姓名 可读可写
int m_num;//年龄 只读
string m_lover;//爱人 只写
};
int main()
{
person A;
A.setname("张三");//成功写入A的姓名
cout << "A`s name:" << A.getname() << endl;//读取A的名字
cout << "A`s num:" << A.getnum() << endl;//读取A的年龄
A.setlover("艾伦");//写入A的爱人
system("pause");
return 0;
}
案例:设计立方体类
- 设计立方体类
- 求出立方体的面积和体积
- 分别用全局函数和成员函数判断两个立方体是否相等
|