草庐IT

c++ - 如果私有(private)变量已更改,如何进行单元测试

假设我在C++中有这个类:classExampleClass{private:intexample_var;public:voidexampleMethod(){example_var=other_value;//othervaluewillbealwaysdifferent}}如何对exampleMethod()进行单元测试?我想做这样的事情:voidtestExampleMethod(){ExampleClassobj;intbefore_call_value=obj.example_var;obj.exampleMethod();intafter_call_value=obj.e

c++ - 隐藏私有(private)重载虚函数?

我有一个大致如下工作的类层次结构:classA{protected:virtualvoidf(int)=0;};classB{protected:virtualvoidf(char*)=0;};classDA:A{private:virtualvoidf(int)override{}};classDB:publicDA,B{private:virtualvoidf(char*)override{}};当我尝试使用clang(或gcc,就此而言)进行编译时,它会发出警告:22:18:warning:'DB::f'hidesoverloadedvirtualfunction[-Woverl

c++ - 为什么 C++ 允许对公共(public)继承基方法进行访问限制?

关于问题“Howtopubliclyinheritfromabaseclassbutmakesomeofpublicmethodsfromthebaseclassprivateinthederivedclass?”,我有一个后续问题:我能理解C++标准允许派生类放宽继承方法的访问限制,但我想不出任何合法的用例,在其中强加访问限制是有意义的派生类。以我对继承概念的理解,如果类Derived是publicclassBase,那么你能用Base做的任何事情用Derived也能做。如果不想让Derived实现Base的接口(interface),那么一开始就不应该使用(公共(public))继

c++ - 当你是 friend 时,为什么 GCC 不允许从私有(private)嵌套类继承?

问同样的问题:为什么GCC允许从私有(private)嵌套类继承?对于非模板类,它允许从私有(private)嵌套类继承,如果它是一个friend,但不是模板类。是错误吗?templateclassInheritFromBaseMember:publicBase::MemberPrivate//error{usingPrivateMember=typenameBase::MemberPrivate;//worksfine};classMyBase{friendclassInheritFromBaseMember;//anothertrytodeclareitfriendtemplate

c++ - 使用指令、重载的私有(private)继承?

我在一个项目中使用私有(private)继承,在“根据”意义上实现。基类定义了operator[],这是我想要使用的功能。因此,我有classA:privateB{usingB::operator[];//...};但是,如何控制我得到的operator[]版本?事实上,我需要不止一个,包括const和非const版本。这能实现吗? 最佳答案 我的理解是您的using应该自动引入运算符的所有不同重载。您是否希望将某些重载排除在子类之外?在这种情况下,最好将工作拆分为父级中几个不同名称的函数,并且只使用您需要的函数。

c++ - 更正友元定义以授予 std::map 对私有(private)默认构造函数的访问权限

我正在开发一个使用结构的库,该结构不应具有该库用户可访问的默认构造函数。structExample{Example(intx);private:Example();};在库中,std::map需要默认构造函数来创建新条目。该库非常小心地在使用默认构造函数的任何地方实际放置值。库使用映射来存储这些结构,如下所示:std::mapdata;检查HEREFORACOMPLETEEXAMPLE在ideOne中。我想阻止库的用户使用默认构造函数。我如何与std::map、std::pair和/或std::tuple交friend以允许std::map使用此默认构造函数?friendclassst

c++ - RVO/NRVO 和公共(public)未定义复制构造函数

我现在正在反对以下提议,我想知道反对或支持它的法律和较小程度上的道德论据。我们有什么:#includeclassT;classC{public:C(){}~C(){/*somethingnon-trivial:say,callsdeleteforallelementsinv*/}//alotofmemberfunctionsthatmodifyC//alotofmemberfunctionsthatdon'tmodifyCprivate:C(Cconst&);C&operator=(Cconst&);private:std::vectorv;};voidinit(C&c){}//can

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

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

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

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

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