C++面向对象 ----封装

目录

什么是面相对象

封装的意义

封装示例

 访问权限

C++中class与struct的区别

成员属性私有化


什么是面相对象

        C++面向有三大行为特征:封装、继承、多态。

        在C++中,万物皆为对象,对象有其属性和行为,例如:人可以作为对象,属性有姓名、身高、年龄、体重......,行为有吃、喝、拉、撒、睡......,车也可以作为对象,属性有轮胎、方向盘、车灯......,行为有载人、放音乐、空调......对于这些具有相同性质的对象,我们可以将他们抽象为类(class),人属于人类,车属于车类。

封装的意义

        封装是C++面向对象的三大特性之一,可以将其属性和行为作为一个整体,表现生活中的事物,将属性和行为加以权限控制。他的意义在于设计类的时候,属性和行为写在一起,表现事物特性。

        语法 :class 类名{访问权限: 行为/属性};

封装示例

        示例1、设计一个园类,求圆的周长和面积

​
#include<iostream>
using namespace std;

#define Pi 3.14

class Circle{
//访问权限: 私有属性
private:
    //属性
    int m_R;//半径
    double m_C;//周长
    double m_S;//面积
//访问权限: 公共权限
public:
    void setR(int r)//设置半径
    {
        m_R = r;
    }

    int getR()    //获取半径
    {
        return m_R;
    }
    double getC()//获取周长
    {
        m_C = 2 * Pi * m_R;
        return m_C;
    }
    double getS()//获取面积
    {
        m_S = Pi * m_R * m_R;
        return m_S;
    }
};

​

        示例2、设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的信息

#include<iostream>
#include<string>
using namespace std;
class Student
{
private:
	string m_Name;
	int m_Id;
public :
	void setName(string sname)
	{
		this->m_Name = sname;
	}
	void setID(int sID)
	{
		this->m_Id = sID;
	}
	string getName()
	{
		return this->m_Name;
	}
	int getID()
	{
		return this->m_Id;
	}
	void printName()
	{
		cout << "姓名:" << this->m_Name << endl;
	}
	void printID()
	{
		cout << "id:  " << this->m_Id << endl;
	}
};

 访问权限

        访问权限有三种:

                1、public      公共权限  类内可以访问  类外也可以访问,子类也可以访问父类的公共成员

                2、private     私有权限  类内可以访问  类外不可以访问,子类不可以访问父类的私有成员 

                3、protected 保护权限  类内可以访问  类外不可以访问,子类也可以访问父类的保护成员

        这三种权限到底有什么区别呢?举个例子:公共权限(public)就像是你的姓名,你自己可以叫这个名字,别人也可以知道你的姓名;保护权限(protected)就像你家的小汽车,你自己可以开,你的家人也可以开,但别人不能开,同时,你可以继承你父亲的小汽车;而私有权限(private)就像你父亲的媳妇,也就是你的母亲,你父亲是她的丈夫,别人不能是他的丈夫,同时你母亲不可能成为你的媳妇,就无法继承给你。(ps:孩子语文差,表述的不是很强出,但大概就这个意思)

        示例:

#include<iostream>
#include<string>
using namespace std;
class Father
{
public:
    string m_Name;
protected:
    string m_Car;
private:
    string m_Wife;
};

class Son: public Father{
};

C++中class与struct的区别

        在C++中 struct 和 class 的唯一区别就在于默认访问权限不同, struct 为公共权限 public,class 为私有权限 private。

成员属性私有化

        在类中我们一般将成员属性设置为私有,可以保证此类的属性不被外界改变,符合我们的生活,同时可以保证继承时不被子类所继承,比如车的种类不同其发动机的缸数,车身的材料都有所不同;其次我们可以在写的时候检测数据的有效性,比如人的寿命也就最多100来岁,如果设置为-1000 或 10000我们就可以提醒用户数值无效。

#include<iostream>
#include<string>
using namespace std;

class Person
{
private:
	string m_Name;
	int m_Age{};//此处{} 是为了防止编译器警告变量未赋值
	string m_Lover;
public:
	void setName(string name)
	{
		this->m_Name = name;
	}
	string getName()
	{
		return this->m_Name;
	}
	int getAge()
	{
		return this->m_Age;
	}
	void setAge(int age)
	{
		if(age<0|| age>150)
		{ 
			cout << "年龄输入错误" << endl;
			return;
		}
		this->m_Age = age;
	}
	string setLover(string name)
	{
		this->m_Lover = name;
	}
};

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值