草庐IT

encapsulation

全部标签

c++ - 违反封装?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:ClassDataEncapsulation(privatedata)inoperatoroverloading请看这个例子。classmyClass{inta;public:myClass(){this->a=0;}myClass(intval){this->a=val;}voidadd(myClass&obj2){couta+obj2.a;obj2.a=0;}voidshow(){couta;}};intmain(){myClassobj1(10),obj2(20);obj2.show();//print

c++ - friend 功能在这里得到继承吗?

Derived类中的方法fun()是私有(private)的。当我们通过运行时多态调用函数ptr->fun()时,它正在执行。但这违反了派生类的封装属性。#includeusingnamespacestd;classDerived;classBase{private:virtualvoidfun(){coutfun();return0;}谁能解释一下发生了什么? 最佳答案 首先,你的Derived::fun()也是virtual,因为如果派生类中的函数与派生类中的虚函数具有相同的声明基类,派生类中的函数自动获得virtual,即使没

C++ 重载和覆盖

此代码生成以下编译错误:error:nomatchingfunctionforcallto'C::print(int)'你能帮我弄清楚编译器产生那个错误的过程吗,(为什么它忽略了类B中的函数)#includeusingstd::cout;classA{public:virtualvoidprint(){coutprint(5);} 最佳答案 print的每个后续定义都隐藏了其父级的定义。您需要一个using语句来取消隐藏它:classA{public:virtualvoidprint(){coutDemo您的指针指向C*,而不是B*

c++ - C++14封装大量参数

我想编写一个使用很多参数的函数,我将其称为a、b和c。我有四种在C++14中实现它的选择。对于2018年新的现代C++项目,这些风格中的哪一种最符合ISOC++的理念??其他风格指南推荐哪些风格?面向对象风格classComputer{inta,b,c;public:Computer(inta,intb,intc):a(a),b(b),c(c){}intcompute(int)const{//dosomethingwitha,b,c}};...constComputercomputer(a,b,c);intresult=computer.compute(123);优点:C++程序员容易

c++ - 为什么 Google 在成员变量之后命名访问器和修改器?

http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Function_Names#Function_NamesRegularfunctionshavemixedcase;accessorsandmutatorsmatchthenameofthevariable:MyExcitingFunction(),MyExcitingMethod(),my_exciting_member_variable(),set_my_exciting_member_variable().对用户隐藏实现细节,这样他/她就

c++ - "Pinnacle"of Encapsulation - 关于Effective C++ Advice的问题

EffectiveC++的第23条规定:将非成员非友元函数优先于成员函数。该项目的全部目的是鼓励封装,以及包的灵active和功能的可扩展性,但我的问题是,在接受这个建议时,你能走多远?例如,您可以拥有自己的类、私有(private)数据成员,然后采用极简主义方法,将公共(public)函数减少为仅用于私有(private)数据成员的访问器和/或修改器。然后,每个其他函数都可以是非成员函数。但是,您是否愿意以可能牺牲代码清晰度为代价增加封装,到处都是访问器和修改器?线画在哪里? 最佳答案 首先,并不是每个人都同意这个建议。除了Mey

c++ - 很难理解封装

我只是……不太确定我理解封装。也许这可能与我仍在类里面学习编程并且还没有做出任何类似的事实有关......供其他人使用的真实世界程序,但我只是不明白它试图完成什么.我知道它限制了对某些类成员和函数的访问。但是就像..限制它来自谁?我见过几个例子,它们有一个私有(private)数据成员,但它们有公共(public)的get或set方法,无论如何都允许对数据成员进行操作。那么是如何限制或隐藏的呢?我的书是这样说的:"封装提供了两个重要的优势:用户代码不能无意中破坏封装对象的状态。封装类的实现可以随时间变化,而无需更改用户级代码。"我想我对他们使用的词语感到困惑。用户代码如何可能破坏对象的

ios - 有没有办法允许某些类访问某些其他类的私有(private)属性?

我有2个类,我希望它们能够访问彼此的属性,但我不希望从其他任何地方访问这些属性。有没有办法做到这一点?是通过子类化实现这一目标的唯一方法吗?有没有办法在两个类之间建立“特殊”关系? 最佳答案 如果我理解您的问题,您实际上是希望通过继承不相关的类A和类B了解比公开宣传的更多的内部结构?假设A有一个名为innardsForB的属性,只有B的实例才能访问该属性。您可以使用类扩展来声明A的非公共(public)接口(interface)。啊.h@interfaceA:NSObject...regularclassgoophere...@en

ios - 在 iOS 中采用 MVVM : ViewModel responsibilities?

我想在我的下一个iOS项目中应用MVVM模式,我已经阅读了一些关于它的帖子和博客。但是他们展示的示例非常简单,没有业务逻辑,只有数据模型实体以及View和Model更新。我不清楚实际上谁负责管理业务逻辑和操作:应该是ViewModel还是Model?例如,假设我的一项功能需要:向Web服务请求一些数据解析此类数据并将其映射到我的数据模型实体对此类实体执行一些检查和操作,并使用结果更新View和Model处理触发更多更新和操作的计时器我应该如何分配这些职责以实现MVVM? 最佳答案 从MVVM中的DataFlow我们可以看出ViewM

PHP _get & _get 或每个变量的唯一获取和设置函数?

PHP内置了_get和_set函数。是为每个变量编写自己的get和set函数更好,还是使用带有大量ifelseif的内置函数?每种方法的优缺点是什么? 最佳答案 __get和__set是魔术方法,通常应该用来解决困难的问题,而不是作为设计依据。例如,我发现自己在一个项目中必须分析一个使用具有深度继承(>2)的OOP的站点,其中一个重要的基类有一个名为name的公共(public)属性。但是,它也有getter和setter(getName、setName)访问该属性仅仅是为了获取和设置它。许多类调用了getName并且同样多的类直接