////// Класс - меценат. Любой желающий может взять из его кошелька сколько хочет./// Если у нас монополия на меценатов, и он может быть только один, объявляем класс статическим
/// (на его работу это никак не повлияет).
///class Меценат
{
public:
/// Отдает нужное количество денегint GetMoney(int СколькоДенегВзять)
{
кошелек -= СколькоДенегВзять;
return СколькоДенегВзять;
}
private:
int кошелек;
};
С правами доступа при наследовании довольно легко запутаться. Мало того, что для данных и функций класса в С++ есть целых три уровня доступа: , и , еще ведь можно и само наследование сделать , и . Самым загадочным их них является -наследование. Запутаться во всем этом зоопарке очень просто, поэтому я аккуратно расписала где какой уровень досупа...
钱包只是一个特殊情况。而且没有人阻止它被放在私人部分。
在另一种 情况下,你可能需要访问 别人的对象的父类变量。
而这要由程序员来决定是否允许。而编译器必须确保程序的正确运行。
这就是问题的关键,如果这种非常 不同的情况发生在你身上,就意味着你的架构在概念上是错误的,而且有潜在的危险。
在C++中,所谓的友好类 的概念是在某个时候以一种不幸的方式引入的。这就像如果一个类知道另一个类是如何组织的,它就可以安全地处理其内部数据。世界上成千上万的程序员使用它的实践表明,它是一个危险的东西,制造的问题比解决的问题多,所以在现代语言如Java和C#中,它被放弃了。
这一特点令人不快,令人惊讶。如果编译器允许改变别人的实例的私有字段,那绝对是胡说八道。我们应该把它发布到服务台。
我不明白:你为什么要如此限制自己?
你认为这将自动使你的方案更安全吗?
它不会的!恰恰相反。
就是那些不必要的限制,会让你有一天把它写成那样。
你知道一两件关于OOP的事情,但你还不了解它。
看。
我关闭了 "钱包 "变量,尽管该类的最初想法是将其钱包提供给所有人,这是否令人惊讶?但如果每个人都想拿多少就拿多少,我们就会赔钱,这是不可能的。现在功能GetMoney允许,但在添加了几行后,就不允许拿钱包里的更大数额的钱了。现在想象一下,有几十个不同的物体向班上的Maecenas要钱。如果钱包变量被打开,那么这些对象中的每一个也将不得不控制(即有自己的实现)来检查他们是否有足够的钱。而如果其中至少有一个没有,它就有可能得到一个负值,而不是零,这将意味着它要求的是钱,最后也是欠钱。伙计,我看你对OOP有一定的了解,但你还没有掌握它的本质。
看。
尽管该类的最初想法是让每个人都能得到它的钱包,但我关闭了 "钱包 "这个变量,这是否令人惊讶?但如果每个人都想拿多少就拿多少,我们就会赔钱,这是不可能的。现在功能GetMoney允许,但添加了几行后,就不允许再拿钱了。现在想象一下,有几十个不同的物体向班上的Maecenas要钱。如果钱包变量被打开,那么这些对象中的每一个也将不得不控制(即有自己的实现)来检查他们是否有足够的钱。而如果其中至少有一个没有,它就有可能得到一个负值,而不是零,这将意味着它要求的是钱,最后也是欠钱。我并不反对私人钱包。谈话是这样开始的:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
这一点是正确的。B 类访问外部的A 类,并希望A 类的受保护变量对其可用。 我不明白这里的逻辑。
这与逻辑有什么关系?
http://alenacpp.blogspot.com/2006/03/blog-post_11.html
受保护的修改者是一个妓女。很少真正需要它。
真正的封装意味着数据隐私。
你能告诉我,如果要选择pos中的第一个字符--我应该在pos中输入1还是0?它是否像数组中那样被索引?
你能告诉我,如果要选择pos中的第一个字符--我应该在pos中输入1还是0?它是像数组中的索引吗?