举例分析private的作用(c/c++学习)

 更新时间:2020年08月19日 23:43:34   作者:蓝莓派Alex  
我知道我们可以用 public 中的值,把private中的数据给提出来,但是还是搞不懂private该怎么用,或者说在一个具体程序中,private有什么用

c++中private的用处

我知道我们可以用 public 中的值,把private中的数据给提出来,但是还是搞不懂private该怎么用,或者说在一个具体程序中,private有什么用。

class fun{
public:
  void setname(string x)
{
  name =x;
}
string getname()
{
  return name;
}
private:
  string name;
};
/*主函数*/
int main()
{
fun ob;
ob.setname("you are apples");
cout << ob.getname() <<endl;

system("pause");
return 0;
}

作用说明:

【way 1】

这是面向对象编程中的东西。

首先你要有一个类的概念,如果没有类的概念,就不会知道为什么需要private、protected和public。

类首先是一种抽象,是一个定义。比如说人类就是一个抽象的定义,具体到我们每个人就是这个类的对象。虽然你我都属于人类,但可能我们姓名不同,性别不同,年龄也不同,因此类需要有属性。除了属性,类还需要有方法,类的方法是这个类对外所提供的交互接口。例如人类可以对外提供走路、说话、吃饭等方法。类的属性通常会声明为private,也就是私有的,然后提供一个公有的方法来访问它。你不理解的其实就是这里,不知道为何要“多此一举”,直接将属性声明为public,直接访问不就可以了吗?

其实,从程序编译的角度来讲这么做是没有问题的,只是,从面向对象的角度来讲,有三个重要的概念,分别是封装、继承和多态。如果将类的属性直接以public的形式对外暴露,实际上就丧失了封装性。什么是封装?封装就是让内部细节对外不可见。类的一个设计原则就是,不要把自己的内部实现细节对外暴露,只对外提供一个功能接口,也就是公有的方法,至于类这个方法里面具体是怎么实现的,外部不需要知道也不应该知道。就以你代码里setname这个方法为例,一个完整的名字应该包括姓和名。假如说你规定姓在前名在后,中间用一个空格来分割。那么如果使用setname方法,你就可以在setname时对外部输入的名字进行检查,看看中间是不是有个空格,如果没有的话可能需要返回一个设置失败

。另外,类的内部,可能是使用一个string类型的变量name来直接保存姓和名,也可以定义2个string变量,一个用来保存姓一个用来保存名,可以在setname方法中将用户的输入以空格拆开,分别填到这2个变量里。可见,就一个简单的setname,其实你类的内部,可以用不同的方法来实现。但是这种实现的差异,对于类的使用者来说是不关系的,类的使用者只需要知道它可以调用setname来设置名字就可以了,而无需关心你这个类里面究竟是用一个string对象还是两个string对象来保存名字。这其实就是一个封装。如果你直接以public类型对外提供名字属性,你实际上就丧失了封装性,因为你把内部的实现细节暴露给了外部。

相信,你应该明白了很多。

【way 2】

简单来说就是编写大工程的时候有用,刚学c++的人会很迷惑,因为你用不到,而且还麻烦,不如公有的方便。
但是大工程上是避免出错的好方法。因为你写了一个软件,跟第三方合作开发,计算工资的部分你这里把关,可是第三方的人如果可以操作你内部数据,他直接修改了工资的值,你就亏了,所以你要把工资这个变量设为私有的,这样第三方的人就不能直接修改你的值了。

到此这篇关于举例分析private的作用(c/c++学习)的文章就介绍到这了,更多相关private作用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于C++静态数据成员的实现讲解

    关于C++静态数据成员的实现讲解

    今天小编就为大家分享一篇关于关于C++静态数据成员的实现讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 实例讲解C++设计模式编程中State状态模式的运用场景

    实例讲解C++设计模式编程中State状态模式的运用场景

    这篇文章主要介绍了实例讲解C++设计模式编程中State状态模式的运用场景,文章最后的适用性部分则介绍了一些State模式善于处理的情况,需要的朋友可以参考下
    2016-03-03
  • vector与map的erase()函数详细解析

    vector与map的erase()函数详细解析

    vector和map都不能将it++写在for循环中,而在循环体内erase(it)
    2013-09-09
  • C语言修炼之路悟彻数组真妙理 巧用下标破万敌上篇

    C语言修炼之路悟彻数组真妙理 巧用下标破万敌上篇

    在C语言和C++等语言中,数组元素全为指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。指针数组比较适合用来指向若干个字符串,使字符串处理更加方便、灵活
    2022-02-02
  • 适合初学者的C语言数据类型的讲解

    适合初学者的C语言数据类型的讲解

    在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
    2022-04-04
  • C++ STL_vector 迭代器失效问题的解决方法

    C++ STL_vector 迭代器失效问题的解决方法

    迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,对迭代器失效我们了解了,那么现在我们就分析,在vector中哪些操作会导致迭代器失效
    2023-08-08
  • vs2022 x64 C/C++和汇编混编(案例代码)

    vs2022 x64 C/C++和汇编混编(案例代码)

    这篇文章主要介绍了vs2022 x64 C/C++和汇编混编,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • 浅析C++中结构体的定义、初始化和引用

    浅析C++中结构体的定义、初始化和引用

    以下是对C++中结构体的定义、初始化和引用进行了详细的介绍,需要的朋友可以过来参考下
    2013-09-09
  • C++获得文件状态信息的方法

    C++获得文件状态信息的方法

    这篇文章主要介绍了C++获得文件状态信息的方法,包括文件状态信息、文件所在磁盘盘符、文件创建时间、访问时间及修改日期等,需要的朋友可以参考下
    2015-07-07
  • C语言实现简单扫雷小程序

    C语言实现简单扫雷小程序

    这篇文章主要为大家详细介绍了C语言实现简单扫雷小程序,一款大众类的益智小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10

最新评论