- C++认为万事万物都皆为对象,对象上有其属性的行为;
- 具有相同性质的对象可以抽象为类,例如:人类,树类…
C++面向对象的三大特性:封装、继承、多态
封装
意义:
- 将属性和行为作为一个整体,表现生活中的事物;
- 将属性和行为加以权限控制
1)将属性和行为作为一个整体
设计一个圆类,求圆的周长;
实例化,通过一个类创建一个对象的过程;
#include <iostream>
using namespace std;
const double PI = 3.14;
//设计一个圆类,求圆的周长 公式 = 2*pi*半径
//class代表设计一个类,类后面紧跟着类名
class Circle
{
//访问权限
public:
//属性,通常用变量表示
int r;
//行为,通常用函数表示
//获取圆的周长
double circumference()
{
return 2 * PI * r;
}
};
int main()
{
//实例化
//通过圆类创建一个具体的圆,也就是对象
Circle C1;
//给圆对象 的属性进行赋值
C1.r = 10;
//获取类的行为
cout << "圆的周长为:" << C1.circumference() << endl;
system("pause");
return 0;
}
练习:设计一个学生类,属性有姓名、学号,可以给姓名学号赋值,可以显示学生的姓名和学号
#include <iostream>
#include <string>
using namespace std;
//设计一个学生类,属性有姓名、学号,可以给姓名学号赋值,可以显示学生的姓名和学号
//class代表设计一个类,类后面紧跟着类名
class Student
{
//访问权限
public:
//属性 成员属性、成员变量
int Student_ID;
string Student_Name;
//行为 成员函数、成员方法
//显示学生的姓名和学号
void Show_Studen()
{
cout << "姓名:" << Student_Name << ",学号:"<< Student_ID << endl;
}
};
int main()
{
//创建一个具体学生,实例化对象
Student S1;
//给S1对象 进行属性赋值操作
S1.Student_ID = 10;
S1.Student_Name = "韩梅梅";
//显示学生信息
S1.Show_Studen();
system("pause");
return 0;
}
给对象属性赋值也有别的方法(暂不写)。
2) 将属性和行为加以权限控制
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
- public 公共权限,成员在类内可以访问,类外也可以访问;
- protected 保护权限,成员在类内可以访问,类外不可以访问;子类可以访问父类的保护内容;
- private 私有权限,成员在类内可以访问,类外不可以访问;子类不可以访问父类的保护内容;
struct和class的区别
默认权限不同;
成员属性私有化
- 将所有成员属性设置为私有,可以自己控制读写权限;
- 对于写权限,我们可以检测数据的有效性;
1)成员属性设置为private,对外提供一些public的接口
#include <iostream>
#include <string>
using namespace std;
//成员属性设置为私有,对外提出一些public的接口,来对属性进行访问(进行读和写的操作)
class Person
{
//成员属性私有化
private:
//姓名、性别、年龄...
string m_Name; //读写
string m_Gender;
int m_Age;
//公有接口
public:
//设置姓名
void setName(string name)
{
m_Name = name;
}
//获取姓名
string getName()
{
return m_Name;
}
};
int main()
{
Person number1;
number1.setName("韩梅梅");
cout << "成员1:" << number1.getName() << endl;
system("pause");
return 0;
}
2)检测数据的有效性
//设置年龄
void setAge(int age)
{
//年龄的有效性验证
if (age < 0 || age >150)
{
cout << "Error!" << endl;
return;//退出
}
m_Age = age;
}