草庐IT

public_private

全部标签

c++ - 基类中的公共(public) protected 数据成员?

我有一个基类和几个派生类。派生类使用一些公共(public)数据,我可以把这些公共(public)数据作为基类的保护成员吗?我知道protected成员有时会破坏封装,所以我想知道是否有什么好的方法。这是一个具体的例子:classBase{public:virtualvoidfoo()=0;voidprintData();protected:std::vectormData;}classDr1:publicBase{public:virtualvoidfoo();//couldchangemData}classDr2:publicBase{public:virtualvoidfoo()

c++ - C++接口(interface)中的私有(private)方法?

为什么我要定义一个包含私有(private)方法的C++接口(interface)?即使在公共(public)范围内的方法在技术上假设行为类似于在接口(interface)实现上使用私有(private)方法的模板方法,即使如此,我们也会告诉技术规范。直接从界面。这不是偏离了接口(interface)的原始用法,即外部和内部之间的公共(public)契约吗?您还可以定义一个友元类,它将使用我们类中的一些私有(private)方法,从而强制通过接口(interface)实现。这可能是一个争论。在C++接口(interface)中定义私有(private)方法还有哪些其他参数?

c++ - 实例化模板时无法访问在类错误中声明的私有(private)成员

我的代码如下templateclassname{public:name():h_(0){}templateoperatorname(){nameu;u.h_=h_;returnu;}private:inth_;};intmain(void){namea;nameb=a;return0;}我得到的错误是intname::h_isprivate.如何修复错误? 最佳答案 name和name是不同的实例化,因此实际上是不同的类。默认情况下不能共享它们的私有(private)成员。你需要制作name所有其他人的friendname的。tem

c++ - 这个私有(private)变量 "not declared in this scope"怎么样?

我目前正在尝试学习更多有关C++面向对象设计的知识(熟悉Java),但遇到了一些困难。我试图将这个项目放在一起,以在使用SFML构建图形和音频的游戏中学习这些原则。我有以下两个文件。WorldObject.h#ifndefWORLDOBJECT_H#defineWORLDOBJECT_H#include#include#include"ImageManager.h"classWorldObject{private:sf::Sprite_sprite;voidSetImagePath(std::stringpath);sf::SpriteGetGraphic();};#endif世界对象

c++ - 为什么 C++ 编译器不区分同名的继承公共(public)方法和继承私有(private)方法?

我很困惑为什么C++编译器不接受这个:classFoo{private:voidBaz(){}};classBar{public:voidBaz(){};classFooBar:publicFoo,publicBar{};voidmain(){FooBarfb;fb.Baz();}gcc给出的错误是:requestformember‘Baz’isambiguouscandidatesare:voidBar::Baz()voidFoo::Baz()但是我想要Bar::Baz()不是很明显吗,因为Foo::Baz()是私有(private)的?为什么编译器不会在这里消除歧义?

c++ - 有没有简单的方法来公开私有(private)父类 C++ 的方法

有没有办法直接暴露私有(private)父类的一些方法。在下面的示例中,如果我有一个Child类型的对象,我希望能够直接调用其父对象的方法a(),而不是b();当前的解决方案会生成大量样板代码,尤其是在存在大量参数的情况下。classParent{public:voida(intp1,doublep2,intp3,std::vector&p4);voidb();};classChild:privateParent{public:voida(intp1,doublep2,intp3,std::vector&p4){Parent::a(p1,p2,p3,p4);}};

C++ 对象 - Private int 返回奇怪的值

我一直在自学C++,并开始创建一个列表管理器来研究指针的概念。我定义了一个名为List的类,它具有三个属性:intitemTotal;Item*firstItem;Item*lastItem;构造函数将它们的值设置为:itemTotal=0;firstItem=NULL;lastItem=NULL;我构建了一个函数来返回itemTotal的值:intList::getItemTotal(){returnitemTotal;}在我的驱动程序中构建对象后,itemTotal立即开始表现得很有趣并返回非常大的数字(每次都是-858993460),即使列表上没有完成任何工作并且程序中几乎没有发

c++ - 复制构造函数应该是私有(private)的还是公共(public)的

我正在编写一个抽象类,它将成为其他几个类的父类。我认为应该将复制构造函数设为私有(private),因为您使用的是抽象类,没有什么可复制的。但是,我不是100%肯定。我说的对吗?如果不对,为什么要公开或保护它? 最佳答案 如果您不想复制类的对象,则复制构造函数应该是私有(private)的。否则,它应该是公开的。 关于c++-复制构造函数应该是私有(private)的还是公共(public)的,我们在StackOverflow上找到一个类似的问题: https

c++ - std::unique_ptr 编译器错误:派生类的成员无法访问基类的私有(private)成员

我得到CompilerErrorC2248当我尝试编译以下代码时:#include#includeusingnamespacestd;classdata{public:staticdataparse(){datad;data::parse(d);returnd;}list>l;private:staticvoidparse(data&node){}};intmain(){return0;}为什么?我该如何解决这个问题?注意:我使用std::shared_ptr而不是std::unique_ptr没有问题。 最佳答案 您需要为您的类型

c++ - "a struct has public inheritance by default"

“默认情况下结构具有公共(public)继承”这句话的真正含义是什么?为什么下面的代码错误只是因为我在从c派生类d时省略了关键字'public'??structc{protected:inti;public:c(intii=0):i(ii){}virtualc*fun();};c*c::fun(){coutfun();} 最佳答案 意思是structc;structd:c相当于structd:publicc您的代码是一个类,扩展了一个结构:structc;classd:c;相当于classd:privatec;因为class默认有私