zoukankan      html  css  js  c++  java
  • c++的类(思考题整理)

    什么是类

    类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。这有点像C语言中的结构,唯一不同的就是结构没有定义所说的“数据相关的操作”,“数据相关的操作”就是我们平常经常看到的“方法”,因此,类具有更高的抽象性,类中的数据具有隐藏性,类还具有封装性。

    • 类的结构

      类的结构(也即类的组成)是用来确定一类对象的行为的,而这些行为是通过类的内部数据结构和相关的操作来确定的。这些行为是通过一种操作接口来描述的(也即平时我们所看到的类的成员函数),使用者只关心的是接口的功能(也就是我们只关心类的各个成员函数的功能),对它是如何实现的并不感兴趣。而操作接口又被称为这类对象向其他对象所提供的服务。
    • 类的定义格式

    类的定义格式一般地分为说明部分和实现部分。说明部分是用来说明该类中的成员,包含数据成员的说明和成员函数的说明。成员函数是用来对数据成员进行操作的,又称为“方法”。实现部分是用来对成员函数的定义。概括说来,说明部分将告诉使用者“干什么”,而实现部分是告诉使用者“怎么干”。

    • 类的一般定义格式:

    class <类名>
    {
    public:
    <成员函数或数据成员的说明>
    private:
    <数据成员或成员函数的说明>
    };
    <各个成员函数的实现>

    为什么类的成员要有不同的访问级别

    (不会这个题,就把回答整理一下下,方便看)

    • 字段、方法、属性都可以叫做类的成员Member,它们都需要定义访问级别。
    • 访问级别的用处在于控制成员在哪些地方可以被访问,这样可以达到面向对象中“封装”的目的。
    • 几个访问级别:public(任何地方都可以访问);private(默认级别。只能由本类中的成员访问)。还有internal、protected两个级别。

    可以把所有成员开成public吗?这样大家就可以随便调用,不是很方便吗?

    • 如果全都设为public,这样所有的数据都能被别人访问,从而某些数据的安全性和合法性就没法被保证,通俗点说,就是你不知道别人会对某些类的属性做什么,或者拿来干嘛,然后别人要是改了数据,对于那些比较大的项目来说,你也很难检查出哪些数据被别人做了改动

    可以不可以把所有的成员变量开成private,然后通过类的函数,取入取出

    • 如果外部程序不是经常需要使用这个类成员变量的话, 对程序的效率影响不大

    把变量开成private,然后通过get,set来存取,有什么好处吗?

    • 只通过get,set进行操作,可以简单的进行赋值,同时还可以加入其他处理,减少特殊操作,并且类型安全。
    • 为什么说是安全的呢?

    比如一个用户输入数据,如果不是用成员函数的形式访问来保证用户输入数据的有效性,而是让用户直接访问数据成员,那很可能会出现用户输入的数据是无效的,然后程序使用这个无效数据会出错。再者,用private能保证一些信息能被封装起来,保护某些信息。

    作用域

    • 作用域简单的来说,就是你声明的代码有意义的区域,通常情况下,我们可以想当然地认为每一对 {} 代表一个作用域,例子(伪代码):
    {
      int a = 100
      cout << a // 100
    }
    cout << a // 出错
    

    以类为例:

    class A {
      int _prop;
    
     public:
      int prop;
    };
    

    这段代码,我们在类A 的一对大括号中,可以随意对私有属性_prop读写,而一旦超出这个范围就不行了,这也就是所谓的封装(你不需要知道他是怎么做的,就算你知道也改不了)

    感谢各位大佬的分享!

  • 相关阅读:
    word批量打印工具,c#写的
    word添加页眉脚和设置各页不同的页眉页脚.
    打印机双面打印
    ORACLE OCP认证
    基于.net程序,使用cefsharp开发的打开网页工具,如何不加载图片
    在iis上运行的服务器端程序,运行一段时间后,访问都只出现一行乱码,回收进程池后又好了,求大神回复
    ArcGis API for JavaScript 开发笔记一 加载地图
    修改现有消息类让.net core项目支持Protobuf
    结合现有分布式系统的数据一致性思考
    让现有vue前端项目快速支持多语言
  • 原文地址:https://www.cnblogs.com/2002ljy/p/12233411.html
Copyright © 2011-2022 走看看