千家信息网

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

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"C++类和对象之封装及class与struct的区别是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++类和对象之封装及class
千家信息网最后更新 2026年10月31日C++类和对象之封装及class与struct的区别是什么

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

封装的意义

封装是C++三大面向对象之一

意义:

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

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

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

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

#includeusing namespace std;//class代表设计一个类,后面跟着的是类名class taiAngle{public:  //访问权限  公共的权限        //属性    int m_a;//直角边a    int m_b;//直角边b        //行为        //获取三角形面积        double calculate()        {                return (m_a*m_b)/2;        }};int main() {         //通过三角形类,创建三角形的对象        // c1就是一个具体的三角形        taiAngle c1;        c1.m_a = 10; //给三角形两边进行赋值操作    c1.m_b = 10;        cout << "三角形的面积为: " << c1.calculate() << endl;//调用方法        system("pause");        return 0;}

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

//学生类class Student {public:        void setName(string name) {                m_name = name;        }        void setID(int id) {                m_id = id;        }        void showStudent() {                cout << "name:" << m_name << " ID:" << m_id << endl;        }private:        string m_name;        int m_id;};int main() {        Student stu;        stu.setName("马可波罗");        stu.setID(250);        stu.showStudent();        system("pause");        return 0;}

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

访问权限

public 公共权限:

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

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

保护权限protected

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

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

私有权限private

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

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

示例:

class Person{        //姓名  公共权限public:        string m_Phone;        //手机  保护权限protected:        string m_Phone;        //银行卡密码  私有权限private:        int m_Password;public:        void display();};void Person::display(){        m_Name = "张三";        m_Phone = "华为";        m_Password = 123456;}int main() {        Person p;        p.m_Name = "李四";        //p.m_Phone = "iPhone 13";  //保护权限类外访问不到        //p.m_Password = 123;     //私有权限类外访问不到        system("pause");        return 0;}

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

class和struct的区别

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

class 默认权限是私有

struct 默认权限是公共

示例:

class C1{        int  m_A; //默认是私有权限};struct C2{        int m_A;  //默认是公共权限};int main() {        C1 c1;        c1.m_A = 10; //错误,访问权限是私有        C2 c2;        c2.m_A = 10; //正确,访问权限是公共        system("pause");        return 0;}

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

成员属性私有

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

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

示例:

class Person {public:        //姓名设置可读可写        void setName(string name) {                m_Name = name;        }        string getName()        {                return m_Name;        }         //获取年龄         int getAge() {                return m_Age;        }        //设置年龄        void setAge(int age) {                if (age < 0 || age > 150) {                        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.setAge(50);        cout << "年龄: " << p.getAge() << endl;        //爱人设置        p.setLover("阿尼亚");        //cout << "爱人: " << p.m_Lover << endl;  //只写属性,不可以读取        system("pause");        return 0;}

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

案例练习

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

参考代码:

#includeusing namespace std;//案例1 判断两个立方体是否相等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 Area(int a, int b, int c)        {                return 2 * (a * b + a * c + b * c);        }        int 体积(int a, int b, int c)        {                return a * b * c;        }        bool isSameByClass(Cube& x)        {                if (x.getH() == m_H && x.getL() == m_L && x.getW() == m_W)                {                        return true;                }                else {                        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;        }        else        {                return false;        }}int main(){        Cube c1;        c1.setH(10);        c1.setL(10);        c1.setW(10);        Cube c2;        c2.setH(10);        c2.setL(10);        c2.setW(10);        cout << "面积为:" << c1.Area(c1.getH(), c1.getH(), c1.getL()) << endl;        cout << "体积为:" << c1.体积(c1.getH(), c1.getH(), c1.getL()) << endl;        //利用成员函数判断立方体        if (c1.isSameByClass(c2))        {                cout << "两个立方体相等" << endl;        }        else {                cout << "两个立方体不相等" << endl;        }        //利用全局函数判断        bool ret = isSame(c1, c2);        if (ret)        {                cout << "两个立方体相等" << endl;        }        else {                cout << "两个立方体不相等" << endl;        }}

到此,相信大家对"C++类和对象之封装及class与struct的区别是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

权限 属性 成员 私有 函数 姓名 方法 两个 立方体 对象 三角形 三角 设计 C++ 封装 年龄 案例 示例 学号 学生 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云信互联网科技有限公司 科技互联网技术 互联网科技金融公司 上海万想互联网科技 互联网科技汛 多迪互联网科技有限公司 互联网公司会议桌创意科技软装饰 厦门比较好的科技互联网公司 银川新华互联网科技学校联系电话 佛山市翊博互联网络科技有限公司 洛阳共同富裕互联网科技有限公司 南博望互联网科技有限公司 济南有互联网科技公司吗 互联网科技实习生岗位 互联网领先科技活动 张家口科技产业互联网平台 同城互联网络科技 银川新华互联网科技学校原画 科技互联网公司两年变化 科技互联网专业务虚会材料 互联网科技企业 A股互联网金融科技公司 金融科技 互联网金融 远拓互联网科技 互联网科技公司做什么 哈尔滨新华互联网科技 内蒙古九一互联网科技 佛山市翊博互联网络科技有限公司 珠海东科互联网科技有限公司 福建互联网展示科技馆设计
0