首页 > 编程语言 >C++ 核心 4.1 类的封装

C++ 核心 4.1 类的封装

时间:2022-10-22 10:05:14浏览次数:49  
标签:封装 Name private class C++ 4.1 权限 public 属性

4 类和对象

面向对象三大特性:封装、继承、多态

万物皆对象。对象= 属性+行为 类是抽象的对象。 比如路上有很多(具体的)车,但抽象出来都属于车。

定义类的语法:

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

4.1 封装

封装意义:

  • 结合属性和行为,符合现实。
  • 权限控制

圆类

const double PI 3.1415;
class Circle
{  
public:  //访问权限
    //属性
    int m_r; //半径

    //行为
    double cal_circumference()
    {
        return 2 * PI * m_r;
    }
};

//使用类
int main(){
    Circle c1;
    c1.m_r = 10;
    cout << c1.cal_circumference() << endl;
}

4.1.1 权限控制

权限控制是封装的另一个意义。 访问权限有三种 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 p;
    p.m_Name = "李四";
    p.m_Car = "五菱"// 错误,类外不能访问protected和private成员
} 

4.1.2 struct 和 class

struct 成员默认是public class 成员默认是private

4.1.3 成员属性设置为私有

成员属性设置为private, 提供public接口,通过set和get方法设置和获取属性。 除了权限控制外,可以在set和get方法中对属性有效性进行验证。

如:

class Person
{
public:
    void set_name(string name){
        m_Name = name;
    } 
    void get_name(){
        return m_Name;
    }
private:
    string m_Name;
}

案例,设计立方体,属性(H,W,L)、方法;分别利用全局函数和成员函数判断相等。

标签:封装,Name,private,class,C++,4.1,权限,public,属性
From: https://blog.51cto.com/pigeon/5785647

相关文章

  • C++ Grade Book System
    C++GradeBookSystemDefineandimplementagradebooksystem.Thegradebookmustusepolymorphismtomanageacollectionofassessmentsofdifferenttypes.......
  • C++中static关键字的作用总结
    static的含义static的含义解释为静止的,静态的,当然它在编程语言中也是相关的含义,接下来,让我们看看在C++语言中,static关键字修饰不同的类型时,它的具体含义是什么。static修饰......
  • C++并发编程实战 第二版 电子书 pdf
    作者:安东尼·威廉姆斯(AnthonyWilliams)出版社:人民邮电出版社出品方:异步图书原作名:C++ConcurrencyinAction,SecondEdition 链接:C++并发编程实战第二版 ......
  • C++三角形区域随机行走
    #include<stdio.h>#include<stdlib.h>#include<vector>#include<time.h>#include<algorithm>#include<iostream>usingnamespacestd;vector<vector<int>>a(4);int......
  • 实验3 数组、指针与现代C++标准库
    一.实验结论:1.实验任务5:Info.hpp:#include<iostream>#include<string>#include<iomanip>usingnamespacestd;classInfo{public:Info(){}Info(st......
  • 正则表达式(C、C++、Python、Shell)
    撰写本文档的初衷本来是想介绍正则表达式怎么写,但是百度一搜,正则表达式的教程的质量已经相当高,我便不在班门弄斧了。正则表达式是一种方法,在不同的语言中,它的应用样式可能......
  • Visual Code配置C/C++
    1.前言VSCode和以前的Visualstudio开发环境不一样,只是代码编辑器,如果需要运行代码C/C++,需要额外安装编译器。在Linux环境下,一般系统自带了gcc编译器,但是windows环境没......
  • C/C++停车场模拟(栈和队列)
    C/C++停车场模拟(栈和队列)【讨论问题2】栈和队列的应用[问题描述]设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的......
  • C/C++single
    #include<iostream>#include<unistd.h>#include<csignal>#include<string.h>usingnamespacestd;voidsignal_handler(intsignal){ cout<<"Caughtsignalnum......
  • 前端js的数据纯前端分页通用方法封装
    用elementui分页组件的话可以直接用这个函数将拿到的总的数据缓存起来,然后分别在切换页数,翻页的时候调用这个方法既可/***前端分页,不再次请求接口,不破坏原数组list......