草庐IT

public_private

全部标签

java - 在 OOP 中,Private 成员对谁来说是私有(private)的?

例如,在OOP中为什么需要放置一些Private。我知道无法访问任何私有(private)成员,但具有相同的类对象。但为什么我需要这样做,而我是我项目的唯一编码员。同样的问题延伸到Protected,protectedfromwho! 最佳答案 private和protected不是为了防止其他编码人员访问类的内部,而是(也)防止你自己创建一个没有明确定义接口(interface)的程序。如果你项目中的每个类都可以修改其他所有类,你不仅容易因为巨大的状态空间而引入错误,而且还会阻止你自己:更改任何类的实现(同时保持接口(interf

c++ - 访问者与公共(public)成员

我有一个类,其中包含许多具有读/写访问权限的内置类型成员。我应该让他们成为公共(public)成员并为每个成员提供获取/设置方法吗?结构如何? 最佳答案 拥有访问器(getter)和修饰器(setter)的全部原因是为您提供额外的间接级别。这种额外的间接级别允许您向公共(public)接口(interface)提供变量的只读View,同时不允许更改数据成员。您仍然可以使用私有(private)或protectedsetter。setter允许您在设置值时进行特殊的错误检查、验证和更正。例如setDirectory(conststd:

c++ - 什么时候私有(private)构造函数不是私有(private)构造函数?

假设我有一个类型,我想将其默认构造函数设为私有(private)。我写了以下内容:classC{C()=default;};intmain(){Cc;//error:C::C()isprivatewithinthiscontext(g++)//error:callingaprivateconstructorofclass'C'(clang++)//errorC2248:'C::C'cannotaccessprivatememberdeclaredinclass'C'(MSVC)autoc2=C();//error:asabove}很好。但是,构造函数并不像我想象的那样私有(privat

c++ - INetSharingConfiguration->EnableSharing( ICSSHARINGTYPE_PUBLIC ) 返回 0x80040201

我正在尝试以编程方式在与Windows7计算机上的已知GUID匹配的设备上启用共享类型public的共享。API位于:http://msdn.microsoft.com/en-us/library/windows/desktop/aa365944(v=vs.85).aspx错误列表显示如下:E_ABORT、E_FAIL、E_INVALIDARG、E_NOINTERFACE、E_NOTIMPL、E_OUTOFMEMORY、E_POINTER和E_UNEXPECTED。我返回的错误代码是0x80040201,解析为:“事件无法调用任何订阅者。”这似乎与上面列出的任何错误代码都不匹配。如果我

c++ - 私有(private)嵌套类的更短范围解析

我有这种(简化的)情况:classTree{classIterator{classStack{//...}public://...}public://...}我不想弄乱类的定义,因此我决定只在类内部编写方法声明。稍后(在下面)当我想定义,比如说,像这样的复制赋值运算符时:Tree::Iterator::Stack&Tree::Iterator::Stack::operator=(constStack&p_stack){//...}我必须处理这些讨厌的范围决议。我想知道是否有办法缩短它们,因为据我所知,using和typedef没有给我任何帮助。编辑:由于这不是CodeReview,@Y

c++ - 涉及私有(private)继承的 C 风格向上转型和向下转型

考虑以下代码:-classA{};classB:privateA{};B*bPtr1=newB;//A*aPtr1=bPtr1;//error//A*aPtr2=static_cast(bPtr1);//errorA*aPtr3=(A*)bPtr1;B*bPtr2=(B*)aPtr3;当隐式和static_cast都失败时(还有dynamic_cast),C风格的转换丢弃了私有(private)继承。为什么?如果C风格的转换只是一些小事,那么C++转换是如何实现的,即它们如何从内存占用中知道继承类型?在将bPtr1转换为aPtr3之后,我将不得不使用另一个C风格的转换来向下转换为B,因

c++ - 可以通过强制转换为布局兼容类型来访问私有(private)成员函数吗?

来自对这个问题的讨论HowisaccessforprivatevariablesimplementedinC++underthehood?我提出了一个变体:不是访问私有(private)数据成员,而是可以通过强制转换和依赖布局兼容性来调用私有(private)成员函数吗?一些代码(灵感来自HerbSutter的专栏UsesandAbusesofAccessRights)#includeclassX{public:X():private_(1){/*...*/}private:intValue(){returnprivate_;}intprivate_;};//Nastyattemptt

c++ - 为什么 Visual C++ 无法编译继承自私有(private)嵌套类的友元模板?

考虑以下代码:classA{classB{};templatefriendclassC;};templateclassC:A::B{};intmain(){Cc;}它可以用GCC和Clang编译,但是VisualC++2010会报错:test.cc(11):errorC2248:'A::B':cannotaccessprivateclassdeclaredinclass'A'这是VisualC++中的错误还是我遗漏了什么? 最佳答案 1998年标准和2011年标准都包含基本相同的代码作为示例,分别在14.5.3#4和14.5.4#3

c++ - 为什么 MSVC 编译器会在没有警告或错误的情况下授予对此私有(private)函数的访问权限?

为什么MSVC构建它时没有任何错误或警告?这段代码中有什么不明确的地方吗?GCC编译器返回错误,因为函数f是私有(private)的。#includeclassA{private:boolf(void){returntrue;};};classB:publicA{};classC:publicB{public:usingA::f;};intmain(){Cc;if(c.f()){printf("Accesstoprivatefunction\n");}return0;}例如,请看这里:https://godbolt.org/z/I5mUSa 最佳答案

c++ - 如何加快计算最长公共(public)子串的长度?

我有两个非常大的字符串,我想找出它们的LongestCommonSubstring.一种方法是使用后缀树(应该有很好的复杂性,虽然实现起来很复杂),另一种是动态规划方法(都提到了在上面链接的维基百科页面上)。使用动态规划问题在于动态规划方法运行时间巨大(复杂度为O(n*m),其中n和m是两个字符串的长度)。我想知道的(在跳转到实现后缀树之前):如果我只想知道公共(public)子串的长度(而不是公共(public)子串本身),是否可以加快算法速度? 最佳答案 这些将使它运行得更快,尽管它仍然是O(nm)。空间优化(这可能会为您节省一