草庐IT

private-key

全部标签

c++ - 避免通过操作从私有(private)构造函数间接实例化

我正在尝试创建一个类,其对象必须包含对其值所代表的内容的简短描述(“名称”)。因此,唯一的公共(public)构造函数应该将字符串作为参数。但是,对于这些操作,我需要创建临时(无相关名称)对象来计算要分配给现有对象的值。为此,我已经实现了一个私有(private)构造函数,不应直接或间接地使用它来实例化一个新对象——这些临时对象应该只通过operator=分配给一个已经存在的对象,它只复制值而不是名称和值。问题来自于“auto”的使用。如果一个新变量声明如下:autonewObj=obj+obj;编译器推导出operator+的返回类型,直接赋值给newObj。这会导致对象具有不相关的

c++ - QMap::operator[](const Key & key) 为什么按值返回?

我注意到QMap::operator[](constKey&key)有这两个overloads:T&QMap::operator[](constKey&key)constTQMap::operator[](constKey&key)const有按值返回的理由吗?因为我们有移动语义:按值返回时,我们应该按常量值返回吗?我问的原因是:假设我们有:classExpensiveToCopy;{public:intsomeProperty()const;...}voidf(constQMap&map){intlala=map[4].someProperty();//Weneedtocopythe

c++ - 隐藏 C++ 库的私有(private)成员

我写了一个库(不管它做什么),它显然有它的头文件。现在,我想隐藏那个头文件的私有(private)元素,所以如果我向某人提供我的库,他/她应该只能看到公共(public)成员(最好没有类定义,除了函数定义之外别无其他)。一种方法是创建C风格的头文件,它将包含某种“init”方法,用于创建实际库类的实例,用户必须将该对象的指针传递给每个函数做这份工作。这是一个好的做法吗?是否有任何其他公开接受的方式来做类似的事情?提前致谢。 最佳答案 除了工厂模式(在我看来,它可能变得笨拙),您还可以将您的私有(private)成员隐藏在PIMPL(

java - 从 C++ 切换到 Java : What are the key points?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭7年前。Improvethisquestion我是一位经验丰富的开发人员,但我的大部分OO编程经验都是使用C++(和一点点Delphi)。我正在考虑做一些Android工作,因此是Java。来自C++背景,Java的哪些领域最有可能让我感到惊讶/烦恼/高兴?我确信这已经被问过了,但我的搜索没有出现类似的问题。当然是CW。

Maven打包项目报错:Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment

报错信息为:Unabletomakefieldprivatecom.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessorscom.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcsaccessible:modulejdk.compilerdoesnot"openscom.sun.tools.javac.processing"tounnamedmodule@73076bce报错原因:因为JDK版本太高与项目中使用的j

c++ - 当我从公共(public)成员函数返回引用时,为什么我可以暴露私有(private)成员?

在代码片段中,我能够访问类范围之外的私有(private)成员变量。虽然永远不应该这样做,但为什么在这种情况下允许这样做呢?通过引用接收返回的私有(private)变量是一种不好的做法吗?#include#includeclassfoo{intx;public:foo(inta):x(a){}intmethodOne(){returnx;}int&methodTwo(){returnx;}};intmain(){fooobj(10);int&x=obj.methodTwo();x=20;//Withthisstatement,modifyingthestateofobj::xstd::

c++ - 为什么我可以从全局范围调用私有(private)构造函数?

此代码编译和运行没有错误:classfoo{staticfoo*ref;foo(){}public:staticfoo*getRef(){returnref;}voidbar(){}};foo*foo::ref=newfoo;//theconstrucrtorisprivate!intmain(intargc,constchar*argv[]){foo*f=foo::getRef();f->bar();return0;}谁能解释一下为什么可以调用构造函数? 最佳答案 该范围不是全局的-静态成员在类范围内,因此它们的初始化表达式也在类

c++ - 使用私有(private)析构函数删除对象

下面的代码怎么可能允许删除带有私有(private)析构函数的对象呢?我已将实际程序缩减为以下示例,但它仍然可以编译和运行。classSomeClass;intmain(intargc,char*argv[]){SomeClass*boo=0;//inrealprogramitwillbevalidpointerdeleteboo;//howitcanwork?return-1;}classSomeClass{private:~SomeClass(){};//!privatedestructor!}; 最佳答案 您正在尝试删除不完整

java - 使用 getter 和 setter 的私有(private)属性有什么好处?

这个问题在这里已经有了答案:Whyusegettersandsetters/accessors?(37个答案)关闭9年前。在面向对象编程中,我曾经有过这个问题,现在仍然有这个问题:Whatwouldbethebenefitofdeclaringaclassmemberasprivateifwewillcreateforitapublicgetterandapublicsetter?我没有发现上述情况与将类成员声明为公共(public)的情况在安全级别上有任何区别。谢谢!

c++ - 多重继承使私有(private)成员可访问

classA{public:inta;};classB:privateA{};classC:publicA{};classD:publicB,publicC{D(){B::a=0;}};即使B私下继承了A,也可以编译。如果我删除D对C的继承,编译器会说a不可访问,正如我所期望的那样。那么C的继承是否混淆了我的编译器?编译器是gcc4.4.7 最佳答案 看起来像一个真正的编译器错误,因为标准不允许这样的访问11.2Accessibilityofbaseclassesandbaseclassmembers在标准本身之外寻找证据,Whoz