草庐IT

c++ - 列表初始化不能用于私有(private)成员吗?

structA{private:inta,b,c;};intmain(){Aa1{};Aa2={};return0;}代码由VC++2012编译(最新更新为“2012年11月CTP”)。我希望a1和a2是零初始化的,但不是。a1和a2没有初始化。为什么? 最佳答案 你是说微软的社区技术预览编译器,他们甚至没有足够的信心将其称为beta,其中有bug?;)这是一个错误;它应该像你期望的那样运行。请照原样报告。 关于c++-列表初始化不能用于私有(private)成员吗?,我们在StackO

c++ - 允许访问私有(private)成员

这个问题在某种程度上是thisone的延续我已经发布了。我想做的:我的意思是允许访问基类的私有(private)成员A在派生类中B,具有以下限制:我想访问的是一个结构--std::map,实际上——,不是一种方法;我不能修改基类;基类A没有模板化的方法,我可以作为后门替代方案重载——我不会添加这样的方法,因为它会反对第二个约束。作为一个可能的解决方案,有人指出我是litb的解决方案(post/blog),但是,对于我来说,我一直无法理解这些帖子中所做的事情,因此,我无法得出解决问题的方法。我正在尝试做的事情:以下代码来自litb的解决方案,提供了一种如何从类/结构访问私有(privat

c++ - 这有可能继承私有(private)类但使成员公开吗?

我想让成员继承私有(private)。我想我看到了一个将它们公开的例子,尽管如此,这个事实是用private关键字派生的。我的问题:如何去做,如果可能的话,难道不应该禁止吗?classU{public:inta;protected:intb;private:intc;};classV:privateU{public:inti;//canmakeapublicagain?}; 最佳答案 您不能将c公开,因为它对U是私有(private)的,并且不能从V访问(此外,这样的设计会require这可能是有缺陷的,因为它会违反封装-一个类不应

c++ - 为什么通过公开继承另一个类来构建一个类是一种糟糕的做法?

我正在为我的OOP期末学习,遇到了一个让我有点难过的问题。问题是“解释为什么通过公开继承List类来构建Stack类是一种糟糕的方法。描述一个更好的解决方案。”我不确定我的回答是否正确,但是否因为“公开继承...”?并且最好改为私有(private)继承,这样除了Stack之外没有其他类知道继承? 最佳答案 如果派生类公开继承自基类,则派生类是基类的一个实例,可能具有一些额外的功能或重写的功能。在堆栈和列表的情况下,堆栈不是列表-它在逻辑上不执行列表操作,如搜索、连接、反转等-因此从列表继承不是一个好主意。您可以在这里使用私有(pr

c++ - 在公共(public)成员函数中返回私有(private) unique_ptr

考虑以下类原型(prototype):classObjHandler{std::unique_ptrGetPtr(){returnobj;}private:std::unique_ptrobj;};这会生成一个编译时错误,说明std::unique_ptr的复制构造函数已被删除。为什么这里不应用移动语义?是否与GetPtr()不拥有obj指针有关?我应该如何实现我的代码(我需要一个成员函数以最小的开销返回一个指向流的拥有指针)? 最佳答案 unique实际上意味着“独特的所有权”。创建所有权的拷贝是没有意义的,因为那样它就不再是唯一

c++ - 错误 C2248 : 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'

我无法理解这个错误。这个错误不在我正在调试的类中。(是吗?)错误是:c:\programfiles\microsoftvisualstudio10.0\vc\include\fstream(890):errorC2248:'std::basic_ios::basic_ios':cannotaccessprivatememberdeclaredinclass'std::basic_ios'1>with1>[1>_Elem=char,1>_Traits=std::char_traits1>]1>c:\programfiles\microsoftvisualstudio10.0\vc\inc

c++ - 关于运算符预定义含义的问题

在“TheC++programminglanguage”的第265页,作者作了如下声明:Becauseofhistoricalaccident,theoperators=(assignment),&(address-of),and,(sequencing;§6.2.2)havepredefinedmeaningswhenappliedtoclassobjects.Thesepredefinedmeaningscanbemadeinaccessibletogeneralusersbymakingthemprivate:然后给出下面的例子:classX{private:voidoperat

c++ - 从类定义中省略 "private"关键字是否令人困惑?

我最近删除了类定义中指定的private,因为它位于顶部,紧跟在class关键字之后:classMyClass{private:intsomeVariable;//...我认为这是多余的。一位同事不同意这一点,称它有效地“隐藏”了数据的private性质。我们的大多数遗留代码都明确声明了访问说明符,并且通常在整个定义中不一致地混合使用它们。我们的类(class)也往往非常大。我正在努力使我的新类足够小,以便我的类定义类似于:classMyClass{//3-4linesofprivatevariablesprotected://3-4linesofprotectedfunctionsp

c++ - 未解析的外部符号 "private: static int Math::result"

这个问题在这里已经有了答案:Whatisanundefinedreference/unresolvedexternalsymbolerrorandhowdoIfixit?(38个答案)关闭8年前。这是我的类定义:#includeusingnamespacestd;classMath{private:staticintresult;public:staticintadd(inta,intb){result=a+b;returnresult;};};这是主要的:#include#include"Amin.cpp"usingnamespacestd;intmain(){Math::add(2

C++ 继承 : scoping and visibility of members

你能解释一下为什么这是不允许的吗,#includeclassB{private:inta;public:inta;};intmain(){return0;}这是什么时候?#includeclassA{public:inta;};classB:publicA{private:inta;};intmain(){return0;}在这两种情况下,我们在classB中都有一个名为a的公共(public)变量和一个私有(private)变量。现在编辑! 最佳答案 Inboththecases,wehaveonepublicandonepriv