c 类和对象之封装及class与struct的区别是什么-亚博电竞手机版

c 类和对象之封装及class与struct的区别是什么

本篇内容主要讲解“c 类和对象之封装及class与struct的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c 类和对象之封装及class与struct的区别是什么”吧!

封装的意义

封装是c 三大面向对象之一

意义:

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

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

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

示例1:设计一个直角三角形,并求解他的面积

#includeusingnamespacestd;//class代表设计一个类,后面跟着的是类名classtaiangle{public://访问权限公共的权限//属性intm_a;//直角边aintm_b;//直角边b//行为//获取三角形面积doublecalculate(){return(m_a*m_b)/2;}};intmain(){//通过三角形类,创建三角形的对象//c1就是一个具体的三角形taianglec1;c1.m_a=10;//给三角形两边进行赋值操作c1.m_b=10;cout<<"三角形的面积为:"<

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

//学生类classstudent{public:voidsetname(stringname){m_name=name;}voidsetid(intid){m_id=id;}voidshowstudent(){cout<<"name:"<

在第二个案例中,姓名和学号是不会被直接访问的,主函数中我们创建了stu学生类对象,但是我们输入“stu."时不会出现m_name和m_id的提示,这就牵扯到了访问权限的知识点,处于私有权限的属性只能靠成员方法加以控制,继续往下看

访问权限

public 公共权限:

成员:类内可以访问,类外可以访问

任何一种继承,子类可以访问父类的公共成员

保护权限protected

成员:类内可以访问,类外不可以访问

任何一种继承,子类可以访问父类的保护成员

私有权限private

成员:类内可以访问,类外不可以访问。

任何一种继承,子类不可以访问父类的私有成员

示例:

classperson{//姓名公共权限public:stringm_phone;//手机保护权限protected:stringm_phone;//银行卡密码私有权限private:intm_password;public:voiddisplay();};voidperson::display(){m_name="张三";m_phone="华为";m_password=123456;}intmain(){personp;p.m_name="李四";//p.m_phone="iphone13";//保护权限类外访问不到//p.m_password=123;//私有权限类外访问不到system("pause");return0;}

这个案例中定义了三种权限的属性,只有punlic:权限下的属性和成员函数可以在类外被调用;这里的display方法我在public:权限下只是声明的一下,然后在类外完成方法的实现,但是需要在原来声明的基础上加"person::"在返回值类型和函数名之间,以表示是person这个类作用域下的display方法;main函数只可以调用display方法和修改m_name属性,因为只有这两个在punlic:权限下了。

class和struct的区别

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

class 默认权限是私有

struct 默认权限是公共

示例:

classc1{intm_a;//默认是私有权限};structc2{intm_a;//默认是公共权限};intmain(){c1c1;c1.m_a=10;//错误,访问权限是私有c2c2;c2.m_a=10;//正确,访问权限是公共system("pause");return0;}

class和struct中都定义了m_a属性,但是main函数中是无法修改类c1对象的m_a属性的

成员属性私有

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

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

示例:

classperson{public://姓名设置可读可写voidsetname(stringname){m_name=name;}stringgetname(){returnm_name;}//获取年龄intgetage(){returnm_age;}//设置年龄voidsetage(intage){if(age<0||age>150){cout<<"你个大乌龟!"<

当属性都设计成私有时,我们可以自己控制属性的读写权限,让程序更具有强壮性,通过写方法来读写属性,是不是很具有掌控性呢,接下来给出一个案例,加深理解。

案例练习

利用全局函数和成员方法两种方式判断两个立方体是否相等,要求利用类的知识,将属性设置为私有。

参考代码:

#includeusingnamespacestd;//案例1判断两个立方体是否相等classcube{public:voidsetl(intl){m_l=l;}intgetl(){returnm_l;}voidsetw(intw){m_w=w;}intgetw(){returnm_w;}voidseth(inth){m_h=h;}intgeth(){returnm_h;}intarea(inta,intb,intc){return2*(a*b a*c b*c);}int体积(inta,intb,intc){returna*b*c;}boolissamebyclass(cube&x){if(x.geth()==m_h&&x.getl()==m_l&&x.getw()==m_w){returntrue;}else{returnfalse;}}private:intm_l;intm_w;intm_h;};//利用全局函数判断,两个立方体是否相等boolissame(cube&c1,cube&c2){if(c1.getl()==c2.getl()&&c1.getw()==c2.getw()&&c1.geth()==c2.geth()){returntrue;}else{returnfalse;}}intmain(){cubec1;c1.seth(10);c1.setl(10);c1.setw(10);cubec2;c2.seth(10);c2.setl(10);c2.setw(10);cout<<"面积为:"<

到此,相信大家对“c 类和对象之封装及class与struct的区别是什么”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注亚博电竞手机版,继续学习!

展开全文
内容来源于互联网和用户投稿,文章中一旦含有亚博电竞手机版的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系亚博电竞手机版删除

最新文章

网站地图