温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++的封装方法是什么

发布时间:2022-02-08 16:31:57 来源:亿速云 阅读:149 作者:iii 栏目:开发技术

本篇内容介绍了“C++的封装方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    封装

    c++认为万事万物皆为对象,对象上有其属性和行为

    封装的意义:

    • 将属性和行为作为一个整体,表现生活中的事物

    • 将属性和行为加以权限控制

     封装意义一:

    在设计类的时候,属性和行为写在一起,表现事物

    语法:

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

    属性和行为作为整体

    #include<iostream>
    using namespace std;
    //圆周率
    const double PI = 3.14;
    //设计一个圆类,求圆的周长
    //圆求周长的公式:2*PI*半径
    class Circle {
    	//访问权限
    	//公共权限
    public:
     		//属性
    		//半径
     		int m_r;
    	//行为
    	//获取圆的周长
    		double calculateZC() {
    			return 2 * PI * m_r;
    		}
    };
     int main() {
    	//通过圆类,创建具体的圆(对象)
    	//实例化  (通过一个类 创建一个对象的过程)
    	Circle c1;
    	//给圆对象的属性进行赋值
    	c1.m_r = 10;
    	//2 * PI * m_r = 62.8;
    	cout << "圆的周长为:" << c1.calculateZC () << endl;
    	system("pause");
    	return 0;
    }

     实例&mdash;设计学生类

    #include<iostream>
    using namespace std;
    //#include<string>
    //设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
    //设计学生类
    class Student {
    public://公共权限
    	//类中的属性和行为 我们统一称为 成员
    	//属性 成员属性 成员变量
    	//行为 成员函数 成员方法
     	//属性
    	string m_Name;//姓名
    	int m_Id;//学号
    	//行为
    	//显示姓名和学号
    	void showStudent() {
    		cout << "姓名:" << m_Name << "  学号:"<<m_Id << endl;
    	}
    	//给姓名赋值
    	void setName(string name) {
    		m_Name = name;
    	}
    	void setId(int Id) {
    		m_Id = Id;
    	}
    };
    int main() {
    	//创建一个具体的学生  实例化对象
    	Student s1;
    	//给s1对象进行属性赋值操作
    	//s1.m_Name = "张三";
    	s1.setName("张三");
    	//s1.m_Id = 1;
    	s1.setId(1);
    	s1.showStudent();
     	Student s2;
    	s2.m_Name = "李四";
    	s2.m_Id = 2;
    	s2.showStudent();
    	system("pause");
    	return 0;
    }

    访问权限

    封装意义二:

    类在设计时,可以把属性和行为放在不同的权限下,加以控制

    权限访问有三类:

    • public         公共权限

    • protected    保护权限

    • private        私有权限

    #include<iostream>
    using namespace std;
    //访问权限
    //三种
    //公共权限 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;//私有权限的内容,在类外访问不到
       	system("pause");
    	return 0;
    }

    class与struct区别

    在c++中struct和class唯一的区别就在于默认的访问权限不同

    区别:

    • struct默认权限为公共

    • class默认权限为私有

    #include<iostream>
    using namespace std;
    class C1 {
     	int m_A;//默认权限 是私有
    };
    struct C2 {
    	int m_A;//默认权限 是公共
    };
    int main() {
    	//struct和class区别
    	//struct 默认权限是 公有 public
    	//class  默认权限是 私有 private
    	C1 c1;
    	//c1.m_A = 100;//在class里默认权限 私有,因此类外不可以访问
     	C2 c2;
    	c2.m_A = 100;//在struct默认的权限为公共,因此可以访问
    	system("pause");
    	return 0;
    }

    成员属性私有化

    • 优点1:将所有成员属性设为私有,可以自己控制读写权限

    • 优点2:对于写权限,我们可以检测数据的有效性

    #include<iostream>
    using namespace std;
    #include<string>
    //成员属性设置为私有
    //1.可以自己控制读写权限
    //2.可以写可以检验数据的有效性
    //设计人类
    class Person {
    public:
    	//设置姓名
    	void setName(string name) {
    		m_Name = name;
    	}
    	//获取姓名
    	string getName() {
    		return m_Name;
    	}
    	//获取年龄  只读
    	int getAge() {
    		//m_Age = 0;//初始化零岁
    		return m_Age;
    	}
    	void setAge(int age) {
    		if (age < 0 || age>150) {
    			m_Age = 0;
    			cout << "你这个老妖精!" << endl;
    			return;
    		}
    		m_Age = age;
    	}
    	//设置情人  只写
    	void setLover(string lover) {
    		m_Lover = lover;
    	}
     private:
    	//姓名  可读可写
    	string m_Name;
    	//年龄  只读
    	int m_Age;
    	//情人  只写
    	string m_Lover;
    };
    int main() {
    	Person p;
    	p.setName ( "张三");
    	cout << "姓名为:" <<p.getName() << endl;
    	//p.m_Age = 18;
    	//p.setAge(18);
    	p.setAge(18);
    	cout << "年龄为:" << p.getAge() << endl;
    	//设置情人为苍井女士
    	p.setLover("苍井");
    	//cout<<"情人为:"<<p.m_Lover << endl;只写权限,数据不可以访问到的
     	system("pause");
    	return 0;
    }

    设计立方体类

    #include<iostream>
    using namespace std;
    //立方体类设计
    //1.创建立方体类
    //2.设计属性
    //3.设计行为 获取立方体面积和体积
    //4.分别利用全局函数和成员函数 判断两个立方体是否相等
     class Cube {
    public:
    	//行为
    	// 设置长
    	void setL(int l) {
    		m_L = l;
    	}
    	// 获取长
    	int getL() {
    		return m_L;
    	}
    	// 设置宽
    	void setW(int w) {
    		m_W =w ;
    	}
    	// 获取宽
    	int getW() {
    		return m_W;
    	}
    	// 设置高
    	void setH(int h) {
    		m_H = h;
    	}
    	// 获取高
    	int getH() {
    		return m_H;
    	}
    	// 获取立方体面积
    	int calculateS() {
    		return 2 * m_L * m_W + 2 * m_L * m_H + 2 * m_W * m_H;
    	}
    	// 获取立方体体积
    	int calculateV() {
    		return m_L * m_W * m_H;
    	}
    	//利用成员函数判断两个立方体是否相等
    	bool isSameByClass(Cube &c) {
    		if (m_L == c.getL() && m_W == c.getW() && m_H == c.getH()) {
    			return true;
    		}
    		return false;
    	}
    private:
    	//属性
    	int m_L;//长
    	int m_W;//宽
    	int m_H;//高
    };
    //利用全局函数来判断 两个立方体是否相等
    bool isSame(Cube &c1,Cube &c2) {
    	if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH()) {
    		return true;
    	}
    	return false;
    }
    int main() {
    	//创建立方体对象
    	Cube c1;
    	c1.setL(10);
    	c1.setW(10);
    	c1.setH(10);
    	cout << "c1的面积为:" <<c1.calculateS() << endl;
    	cout << "c1的体积为:" << c1.calculateV() << endl;
    	//创建第二个立方体
    	Cube c2;
    	c2.setL(10);
    	c2.setW(10);
    	c2.setH(10);
     	//利用全局函数判断
    	bool ret = isSame(c1,c2);
    	if (ret) {
    		cout << "c1和c2是相等的" << endl;
    	}
    	else {
    		cout << "c1和c2是不相等的" << endl;
    	}
    	//利用成员函数判断
    	ret = c1.isSameByClass(c2);
    	if (ret) {
    		cout << "成员函数判断的:c1和c2是相等的" << endl;
    	}
    	else {
    		cout << "成员函数判断的:c1和c2是不相等的" << endl;
    	}
    	system("pause");
    	return 0;
    }

    “C++的封装方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    c++
    AI