错误、漏洞、问题 - 页 1057

 
Zloy_Koldun:

钱包只是一个特殊情况。而且没有人阻止它被放在私人部分。

另一种 情况下,你可能需要访问 别人的对象的父类变量

而这要由程序员来决定是否允许。而编译器必须确保程序的正确运行。

这就是问题的关键,如果这种非常 不同的情况发生在你身上,就意味着你的架构在概念上是错误的,而且有潜在的危险。

在C++中,所谓的友好类 的概念是在某个时候以一种不幸的方式引入的。这就像如果一个类知道另一个类是如何组织的,它就可以安全地处理其内部数据。世界上成千上万的程序员使用它的实践表明,它是一个危险的东西,制造的问题比解决的问题多,所以在现代语言如Java和C#中,它被放弃了。

 
C-4:
这一特点令人不快,令人惊讶。如果编译器允许改变别人的实例的私有字段,那绝对是胡说八道。我们应该把它发布到服务台
他们向优点看齐,那里也是这样的。
 
Zloy_Koldun:

我不明白:你为什么要如此限制自己?

你认为这将自动使你的方案更安全吗?

它不会的!恰恰相反。

就是那些不必要的限制,会让你有一天把它写成那样。

你知道一两件关于OOP的事情,但你还不了解它。

看。

///
/// Класс - меценат. Любой желающий может взять из его кошелька сколько хочет.
/// Если у нас монополия на меценатов, и он может быть только один, объявляем класс статическим
/// (на его работу это никак не повлияет).
///
class Меценат
{
    public:
      /// Отдает нужное количество денег
      int GetMoney(int СколькоДенегВзять)
      {
          кошелек -= СколькоДенегВзять;
          return СколькоДенегВзять;
      }
    private:
       int кошелек;
};
我关闭了 "钱包 "变量,尽管该类的最初想法是将其钱包提供给所有人,这是否令人惊讶?但如果每个人都想拿多少就拿多少,我们就会赔钱,这是不可能的。现在功能GetMoney允许,但在添加了几行后,就不允许拿钱包里的更大数额的钱了。现在想象一下,有几十个不同的物体向班上的Maecenas要钱。如果钱包变量被打开,那么这些对象中的每一个也将不得不控制(即有自己的实现)来检查他们是否有足够的钱。而如果其中至少有一个没有,它就有可能得到一个负值,而不是零,这将意味着它要求的是钱,最后也是欠钱。
[删除]  
C-4:

伙计,我看你对OOP有一定的了解,但你还没有掌握它的本质。

看。

尽管该类的最初想法是让每个人都能得到它的钱包,但我关闭了 "钱包 "这个变量,这是否令人惊讶?但如果每个人都想拿多少就拿多少,我们就会赔钱,这是不可能的。现在功能GetMoney允许,但添加了几行后,就不允许再拿钱了。现在想象一下,有几十个不同的物体向班上的Maecenas要钱。如果钱包变量被打开,那么这些对象中的每一个也将不得不控制(即有自己的实现)来检查他们是否有足够的钱。而如果其中至少有一个没有,它就有可能得到一个负值,而不是零,这将意味着它要求的是钱,最后也是欠钱。
我并不反对私人钱包。谈话的开始是这样的:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
 
Zloy_Koldun:
我并不反对私人钱包。谈话是这样开始的:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
这就对了。B 类指的是外部的A 类,并希望A 类的受保护变量对其可用。我不明白这里的逻辑在哪里。
 
C-4:
这一点是正确的。B 类访问外部的A 类,并希望A 类的受保护变量对其可用。 我不明白这里的逻辑。
它与逻辑无关,它要的是......!
 
MetaDriver:
这与逻辑有什么关系?

http://alenacpp.blogspot.com/2006/03/blog-post_11.html

受保护的修改者是一个妓女。很少真正需要它。

真正的封装意味着数据隐私。

Права доступа при наследовании
  • 2006.03.11
  • alenacpp.blogspot.com
С правами доступа при наследовании довольно легко запутаться. Мало того, что для данных и функций класса в С++ есть целых три уровня доступа: , и , еще ведь можно и само наследование сделать , и . Самым загадочным их них является -наследование. Запутаться во всем этом зоопарке очень просто, поэтому я аккуратно расписала где какой уровень досупа...
 
你能告诉我,如果要选择pos中的第一个字符--我应该在pos中输入1还是0?它是否像数组中那样被索引?
 
paladin800:
你能告诉我,如果要选择pos中的第一个字符--我应该在pos中输入1还是0?它是否像数组中那样被索引?
这很容易检查:打印。
 
paladin800:
你能告诉我,如果要选择pos中的第一个字符--我应该在pos中输入1还是0?它是像数组中的索引吗?
是的,从零开始。