C++ 私人会员的角色是什么? #包括 班级学生 { 私人: 国际卷号; 国际标准; 公众: 无效输入(); void display(); };

C++ 私人会员的角色是什么? #包括 班级学生 { 私人: 国际卷号; 国际标准; 公众: 无效输入(); void display(); };,c++,class,security,C++,Class,Security,我问我的老师让一些班级成员私有化和让一些成员公有化的意义。他说,出于安全原因,数据成员通常是私有的。他说没有任何对象可以访问类的私有内容,这就是它们安全的原因 我的问题是: 当我们开发软件时,我们将把可执行文件分发给用户。用户将无法编辑代码。我们老师说的是什么样的安全措施?当我创建了整个代码后,人们如何编辑它?关于安全性有什么需要考虑的?这不会影响应用程序的用户,但老师正试图让您避免自己的错误 如果可能的话,将成员变量保持私有,可以防止您在代码中不应该访问和更改它们的地方意外地访问和更改它们 它

我问我的老师让一些班级成员私有化和让一些成员公有化的意义。他说,出于安全原因,数据成员通常是私有的。他说没有任何对象可以访问类的私有内容,这就是它们安全的原因

我的问题是:
当我们开发软件时,我们将把可执行文件分发给用户。用户将无法编辑代码。我们老师说的是什么样的安全措施?当我创建了整个代码后,人们如何编辑它?关于安全性有什么需要考虑的?

这不会影响应用程序的用户,但老师正试图让您避免自己的错误

如果可能的话,将成员变量保持私有,可以防止您在代码中不应该访问和更改它们的地方意外地访问和更改它们


它还让代码用户清楚地知道哪些变量和函数是要在课堂外使用的,哪些不是,从而清楚地定义了课堂的API。

不,您的老师可能不认为所谓的封装是为了安全。实际上,封装的存在还有其他几个原因:

  • 创建更好的代码可维护性。当所有属性都是私有的和封装的时,代码的编写者很容易通过更改方法来维护程序
  • 有一个受控的环境。封装允许用户通过对象以受控的方式使用给定的对象。如果封装不存在,客户机代码可以以任何他们想要的方式使用类的成员,而成员函数将此限制为特定的行为
  • 隐藏复杂性:隐藏与用户无关的复杂性。有时,某些属性和方法只供内部使用,用户不必知道这些。这使得用户使用对象变得简单
  • 一个示例说明了如果没有封装会发生什么:


    假设您有一个名为
    Human
    的类,其中有一个名为
    age
    的成员是public。现在,如果有人想修改这个,比如说,基于输入,那么他们每次都必须检查输入是否为负数,或者输入量是否很大,除非他们为它生成一个函数。现在,如果有一个成员函数提供对age的访问,那么它就不再是客户机代码的问题了,因为字段的setter会处理它,因为确保字段有效是类的责任。

    就像每个人都知道自己的秘密一样,告诉别人是危险的,
    私有成员不暴露于其他类,因为它可能会破坏类中的某些内容,而其他类实际上不需要知道它们


    然而,人们需要沟通来满足他们的需求。我们交谈,解释我们的想法以便被理解。。嗯,
    公共成员是这样的,它们是类本身与其他类通信所需要的。

    C++类及其成员可见性与安全性没有任何关系。编译器对使用类的代码使用
    private
    protected
    public
    关键字,仅此而已。你也许应该读。。。。我认为你的老师不对。“私有”成员是为了告诉程序员他们不应该访问这些成员。不管怎样,只要他们努力,他们仍然可以这样做
    *(int*)和student
    在这种情况下可能会起作用。您的意思是,使成员私有化的唯一原因是防止它们被继承?“安全性”可能不是最好的词,因为它在计算中有不同的主要含义。这是为了在编写程序时更加安全。它是一种帮助防止编程错误的工具。访问说明符与用户可以编辑源代码的示例无关。你的老师告诉你的安全性可能会误导你,但我认为他说的是访问“安全性”。将这些变量设置为私有应该使开发人员远离访问错误,甚至可以提高代码的可读性。在您的示例中,任何看到您的代码的开发人员都知道,他无法访问学生类之外的变量,也就是说,这些变量只有学生知道(私有)。您的意思是,将成员私有化的唯一原因是防止继承它们吗?否。。。?你读过答案了吗?使用封装有很多原因。我没有完全理解它。即使数据成员是在public下声明的,怎么会有人意外地对其进行编辑?@user8051390您知道
    private:
    的作用吗?它阻止progrmmer从类外部更改其值。这不仅仅是关于继承。你能告诉我什么是客户机代码吗?我无法理解你的第二点。2.你说过它也被用来隐藏复杂性。但我们将向用户提供可执行文件。即使有一些函数和变量供内部使用,用户也无法查看/访问它。为什么我们需要向用户隐藏复杂性?用户不关心程序。1。客户机代码是使用您创建的类(可能作为库)2的代码。不,我所说的用户是指代码的用户(即使用您的类的人,与客户机相同),而不是可执行文件的用户。那个人和你可能想要避免复杂性。程序的实际用户只关心运行速度快的程序。
    #include<iostream>
    class student
    {
        private:
                int roll_no;
                int standard;
        public:
                void input();
                void display();
    };