c – 公共变量不好的做法对Getters和Setters的功能?

前端之家收集整理的这篇文章主要介绍了c – 公共变量不好的做法对Getters和Setters的功能?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在他的流中遇到了这个问题,而且从那以后,我就像一个痛苦的拇指一样向我伸出援手.我想也许,如果我保存了这个视频,并在将来更加熟练的时候回到它,我会理解它,但它只是一直在烦恼.这是视频…

它会在1:13:00自动启动.

https://youtu.be/uHSLHvWFkto?t=4380

作为C/C++的新程序员听完这个完全扭曲的思维方式.随着他是一个专业人士,我应该采取的建议,但我需要一些清晰度.从网站,视频到书籍,我已经看到使用公共变量是一个不好的做法,但从我从这个视频中得到的其他的说法.在视频中,他使用一个结构,默认情况下它具有访问修饰符“public”vs具有默认访问权限“private”的类.有没有什么我不能正确理解这里.

我不知道该怎么办.如果我让我的变量公开不会冒险模糊?他说他会自动为某人编码格式的方式是让我哈哈!我应该真正使用哪一个?什么时候和为什么?

解决方法

首先,一个结构完全等同于一个类,但默认的成员访问是public而不是private.

现在,在面向对象编程(OOP)中,拥有公共数据成员(变量)并不被认为是好的做法,因为这使得所有代码都依赖于类的内部,从而打破了原始的OOP原则,…

圣洁神圣的封装

封装是一种编码哲学,它规定一个类应该在一个紧密的实体中同时管理数据和代码.也就是说,您不访问数据指向,而是使用类中的方法来处理此类数据.这具有几个设计优点,例如,您将知道,除了类中的代码之外,没有任何代码可能会包含有关操纵此类信息的错误.

现在,get()和set(),或者称为访问器,都是一个完整的谎言!随着访问者,你欺骗自己,认为你尊重封装,当你打破它!它增加了膨胀,不必要的冗长,错误以及除封装之外的一切.不带有一个没有签名的getAge()和void setAge(unsigned)的Person类,它具有一个无符号的getAge()和一个void incrementAge(),或者你想调用它.

现在,你的问题的核心是…

“平原”结构

不一定需要封装.虽然您应该(通常)不要在头文件(再次,至少一些封装)上执行此操作,您可以创建对单个翻译单元是私有的静态纯旧结构体.我的建议是使他们甚至比他们已经“老”,即

>所有数据成员都是公开的.
>没有办法.
>没有构造函数(隐式的除外).
>继承始终是公共的,只允许从其他普通的旧结构体.
>我重复一遍,不要把它们放在头文件上!

现在,对于简单的旧结构的另一个用法是(讽刺的是)Metaprogrammatic导出的constexpr数据和类型,也称为modern-hardcore-template-Metaprogramming-without-having-to-type-public-everywhere,例如…

template<bool B,typename T>
struct EnableIf {};

template<typename T>
struct EnableIf<true,T> {
    typedef T type;
};

template<bool B,typename T>
using SFINAE = typename EnableIf<B,T>::Type;

猜你在找的C&C++相关文章