只是想澄清一下。抽象基类不应该有私有(private)成员吗?例如classabc{public:virtualvoidfoo()=0;private:intmyInt;}您永远无法访问myInt,因为您无法创建abc的实例,并且它不会在派生类中,因为它是私有(private)的。有没有在抽象基类中使用私有(private)成员的情况,或者这是错误的? 最佳答案 在C++中,您可以拥有一个包含非纯虚方法的抽象类。在这种情况下,根据设计,拥有私有(private)成员是有意义的:classbase{std::stringname;pu
(请原谅菜鸟问题)我有4节课:classPerson{};classStudent:publicPerson{};classEmployee:publicPerson{};classStudentEmployee:publicStudent,publicEmployee{};基本上Person是基类,它是Student和Employee的直接子类。StudentEmployee使用多重继承来继承Student和Employee。Personpat=Person("Pat");Studentsam=Student("Sam");Employeeem=Employee("Emily");S
我在使用UnitTest++编写单元测试时遇到了麻烦。.我想知道如何以干净的方式(或者任何方式......)访问私有(private)成员类字段现在,我有了一个解决方案,可以使用派生自被测类的类固定装置访问protected成员。下面的代码展示了这个想法:structMyFixture:ClassUnderTest{};TEST_FIXTURE(MyFixture,OneTest){do_something();CHECK(protected_field==true);}不过,我认为这不是很干净,因为在某些配置中可能会出现与继承相关的问题,而且无论如何,只能访问和测试protected
考虑以下代码:#includeclassA{public:A(A&&);//somewhatexpensivestaticstd::vectormake_As(){std::vectorresult;result.push_back(A(3));result.push_back(A(4));returnresult;}private:A(int);//privateconstructor};自从A的move构造函数有点昂贵(无论出于何种原因),我想避免调用它并使用emplace_back()而是:#includeclassA{public:A(A&&);//somewhatexpens
我有一个以Base为基类的继承链。我希望能够编写一个继承Base和可能的另一个Base派生类的类模板。我可以使用虚拟继承,但我找到了另一种解决方案。我想知道它是否是常见的/可观的/合法的类设计:编写一个类模板,其中模板参数是它派生的类,即它必须是Base或Base派生类。在构造函数中,我可以使用静态断言来真正确保用户没有使用任何非法类作为模板参数。如果它有效,我将永远不会有虚拟继承问题......问题是,这样做是可以的。我在其他项目中从未见过它,所以我想在使用它之前先确定一下。编辑:为了确保我不会混淆你,这里有一些代码:classBase{};classDerived:publicBa
背景信息:这是在VisualStudio2008上检测到的,并在VisualStudio2013上再次确认。G++对代码大喊大叫,而Visual默默地接受了私有(private)继承漏洞。所以,在VisualC++上,我们有以下代码:classBase{};classDerived:Base{};//inheritsprivately.Addingexplicitlythe//keywordprivatechangesnothingintmain(){std::auto_ptr(newDerived);//compiles,whichisNOTEXPECTEDstd::auto_ptr
考虑:structA{intx;};structB:A{};structC:privateA{};现在,正如预期的那样,代码structD:C{D(){C::x=2;}};intmain(){Dd;}无法编译:test2.cc:Inconstructor‘D::D()’:test2.cc:1:16:error:‘intA::x’isinaccessibletest2.cc:7:12:error:withinthiscontext现在,如果我这样做了structD:B,C{D(){C::x=2;}};intmain(){Dd;}然后错误消失!A::x也不应该是不可访问的吗?这里的解释是什
我使用shared_ptr和enable_shared_from_this玩了一会儿,但遇到了一些我不太了解的东西。在我的第一次尝试中,我构建了这样的东西:classshared_test:std::enable_shared_from_this{public:voidprint(boolrecursive){if(recursive){shared_from_this()->print(false);}std::cout请注意,这个类正在私下扩展std::enable_shared_from_this。这显然有很大的不同,因为执行这样的事情:intmain(){autot(std::
我对私有(private)方法和函数有疑问。假设我有一些不需要在类中的实用方法。但是这些相同的方法需要调用我不想向用户公开的其他方法。例如:Suspect.hnamespaceSuspect{/***\briefThisshoulddothisandthatandmorefunnythings.*/voidVerbalKint(void);//Thisisforyoutouse}Suspect.cppnamespaceSuspect{namespaceSurprise{/***\briefTheuserdoesn'tneedtobeawareofthis,aslong*thepubli
当一个静态成员变量在类中声明为私有(private)时,如何定义它?假设我有以下类声明classstatic_demo{private:staticinta;public:staticintb;voidset(intx,inty){a=x;b=y;}voidshow(){cout那么下面定义a的语句会导致编译错误。intstatic_demo::a;那么可以在类的私有(private)部分有一个静态数据成员吗?按照Greg添加完整代码,#includeusingnamespacestd;classstatic_demo{private:staticinta;public:statici