C++面向对象编程——封装
·
C++面向对象的三大特性为:封装、继承、多态
C++认为万事万物都皆为对象,对象上有其属性和行为
例如:
人可以作为对象,属性有姓名、年龄、身高、体重.,行为有走、跑、跳、吃饭、唱歌...
车也可以作为对象,属性有轮胎、方向盘、车灯…行为有载人、放音乐、放空调...
具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类
封装
封装的意义:
①将属性和行为作为一个整体,表现生活中的事物
语法:class 类名{ 访问权限:属性/行为 };
类中的属性和行为,我们统称为成员
属性:成员属性 成员变量
行为:成员函数 成员方法
//圆周率
const double PI = 3.14;
//设计一个圆类,求圆的周长
//圆求周长的公式:2*PI*半径
//class代表设计一个类,类后面紧跟着的就是类名称
class Circle{
//访问权限
//公共权限
public:
//属性
//半径
int m_r;
//行为
//获取圆的周长
double calculateZC(){
return 2*PI*m_r;
}
//给半径赋值
void set(String name){
m_name = name;
}
}
int main(){
//通过圆类创建具体的圆
//实例化(通过一个类 创建一个对象的过程)
Circle c1;
//给圆对象的属性进行赋值
c1.m_r = 10;
c1.set(10);
cout << "圆的周长为:" <<cl.calculateZC()<<endl;
}
②将属性和行为加以权限控制
访问权限有三种:
public 公共权限 类内可以访问 类外可以访问
protected 保护权限 类内可以访问 类外不可以访问
private 私有权限 类内可以访问 类外不可以访问
class Person{
public:
//公共权限
string m_Name;
protected:
//保护权限
string m_Car;
private:
//私有权限
int m_Password;
public:
void func(){
m_Name = "张三"
m_Car = "拖拉机"
m_Password = 123456;
}
}
int main(){
Person p1;
p1.m_Name = "李四"
p1.m_Car = "奔驰"//保护权限内容,在类外访问不到
p1.m_Password = 123;//私有权限内容,类外访问不到
}
struct和class的区别
在C++中struct和class唯一的区别就在于默认的访问权限不同
①struct默认权限为公共
②class默认权限为私有
class C1
{
int m_A;//默认权限,是私有
};
struct C2
{
int m_A;//默认权限,是公共
};
int main(){
//在class里默认权限 私有,因此类外不可以访问
C1 c1:
//在struct默认的权限为公共,因此可以访问
C2 c2:
c2.m_A = 100;
}
成员属性设置为私有
优点:
①将所有成员属性设置为私有,可以自己控制读写权限
②对于写权限,我们可以检测数据的有效性
class Person{
public:
void setName(string name){
m_Name = name;
}
string getName(){
return m_Name;
}
int getAge(){
return m_Age;
}
//设置年龄(0~150)
int setAge(int Age){
if(Age<0 || Age>150 ){
cout<<"年龄输入有误,赋值失败"<<endl;
return;
}
m_Age = Age;
}
void setIdol(string idol){
m_Idol = idol;
}
private:
string m_Name; //可读可写
int m_Age = 18; //只读
string m_Idol; //只写
}
int main(){
Person p;
p.seyName("张三");
cout<<"姓名:"<<p.getName()<<endl;
p.setAge(20);
p.m_Age = 20;
cout<<"年龄:"<<p.getAge()<<endl;
p.setIdol("小明");
cout<<"偶像:"<<p.setIdol()<<endl;
}
静态成员
静态成员就是在成员变量和成员函数前加上关键字static,成为静态成员变量
静态成员变量分为:
1、静态成员变量
①所有对象共享同一份数据
②在编译阶段分配内存
③类内声明,类外初始化
//类内声明,类外初始化
class Person{
public:
static int m_A;
//静态成员变量也是有访问权限的
private:
static int m_B;
};
int Person::m_A = 100;
int Person::m_B = 200;
void test01(){
Person p;
cout << p.m_A <<endl;
Person p2;
p2.m_A = 200;
cout <<p.m_A <<endl;
}
//静态成员变量,不属于某个对象上,所有对象都共享同一份数据
//因此静态成员变量有两种访问方式
void test02(){
//通过对象进行访问
Person p;
cout << p.m_A <<endl;
//通过类名进行访问
cout <<Person::m_A <<endl;
//类外访问不到私有静态成员变量
cout <<Person::m_B <<endl;
}
2、静态成员函数
①所有对象共享同一个函数
②静态成员函数只能访问静态成员变量
class Person{
public:
static void func(){
m_A = 100;//静态成员函数可以访问静态成员变量
m_B = 200;//静态成员函数不可以访问非静态成员变量
cout << "static void func调用" <<endl;
}
static int m_A;
int m_B;
//静态成员函数也是有访问权限的
private:
static void func2(){
cout << "static void func2调用" << endl;
}
};
int Person::m_A=0;
void test01(){
//通过对象访问
Person p;
p.func;
//通过类名访问
Person::func();
//类外访问不到私有静态成员函数
Person::func2();
}
更多推荐


所有评论(0)