草庐IT

private-messaging

全部标签

c++ - 如何为 STL 类容器提供公共(public) const 迭代器和私有(private)非 const 迭代器?

我有一个包含std::list的类,我希望为const_iterator提供publicbegin()和end(),为普通迭代器提供privatebegin()和end()。但是,编译器看到私有(private)版本并提示它是私有(private)的,而不是使用公共(public)const版本。我知道C++不会重载返回类型(在本例中为const_iterator和迭代器),因此它选择了非常量版本,因为我的对象不是const。如果没有在调用begin()之前将我的对象转换为const或者没有重载名称begin是否有办法实现这一点?我认为这是一个已知的模式,人们以前已经解决过,并且想效仿

c++ - 需要在 Singleton 类中私有(private)化赋值运算符

有人可以证明在Singleton类实现中私有(private)化赋值运算符的必要性吗?将Singleton&operator=(Singletonconst&);私有(private)化解决了什么问题?classSingleton{public:staticSingleton&Instance(){staticSingletontheSingleton;returntheSingleton;}private:Singleton();//ctorhiddenSingleton(Singletonconst&);//copyctorhiddenSingleton&operator=(Sin

c++ - 是否需要私有(private)静态方法?

ThePrincipleEngineer在我上一家公司有一条规则,privatestatic方法应该作为实现文件中的函数来实现,而不是类方法。我不记得他的规则是否有任何异常(exception)。我在目前的工作中偶然发现了这样做的动机:如果相关函数的参数或返回类型是需要在header中包含定义文件的对象,这可能会造成不必要的困难。em>这足以让我不再使用privatestatic方法,但在我注销它们之前我想知道是否有人知道他们的利基市场填写一个实现文件函数不会?编辑:此处的示例可能会有所帮助。假设这是classFoo声明的开始,它还有其他方法将在实现文件中调用voidfoo():cla

c++ - 将静态私有(private)映射初始化为空

我有一个staticmap是一个private数据成员。如何在实现文件中对其进行初始化,使其初始容器为空?它不是const。开始时此容器中没有任何内容,这一点很重要。 最佳答案 标题:classXXX{private:staticstd::mapthe_map;//declaresstaticmember//...执行文件:std::mapXXX::the_map;//definesstaticmember这会将映射的构造函数调用插入到程序初始化代码中(并在清理中插入析构函数)。不过要小心-不同翻译单元之间的静态构造函数的顺序是未定

c++ - 为什么让 operator new 私有(private)中断 std::shared_ptr?

我正在实现一个多态类型(称之为A),我想通过std::shared_ptr专门管理它。为了允许在派生类的构造函数中使用shared_from_this,A使用new分配,然后初始化一个成员std::shared_ptr给自己自动管理它的生命周期。为了帮助实现这一点,我决定将类特定的operatornew设为私有(private),并计划使用create()辅助函数而不是new和make_shared。该设计可能看起来有点滑稽,但在我正在处理的UI库的上下文中是有意义的。一个最小的可重现示例如下:structA{A():m_sharedthis(this){}voiddestroy(){

c++ - 我可以转换对象并访问 C++ 中的私有(private)数据成员吗?

我想访问类中的私有(private)数据成员。类中没有访问私有(private)数据成员的成员函数。这是私有(private)的。我想上课,想知道如何打开它。一种方法是复制类的声明,将私有(private)成员设为公有并将新类称为something_else。然后我重新解释转换并复制原始对象。这行得通。但我想要更优雅的东西……或者可能是通用的……或者只是另一种方式。有哪些选择?我可以使用void*吗?我可以将类(class)memcpy到另一个空类(class)吗?有什么方法可以做到这一点?% 最佳答案 我假设您已经经历了“打破封装

c++ - 访问同一类对象的私有(private)元素

这合法吗?如果不允许,以下代码是否允许这样做?classFoo{friendclassFoo;} 最佳答案 那是多余的。Foo已经可以访问所有Foo成员。两个Foo对象可以访问彼此的成员。classFoo{public:inttouchOtherParts(constFoo&foo){returnfoo.privateparts;}private:intprivateparts;};Fooa,b;b.touchOtherParts(a);上面的代码可以正常工作。B将访问A的私有(private)数据成员。

c++ - 私有(private)继承

我不完全明白这一点:classBase{public:Base(){cout是否因为有人可能使用bPtr调用call()而这实际上是在派生对象上完成的?还是有其他原因? 最佳答案 公有继承就是大家都知道Derived是从Base派生出来的。protected继承意味着只有Derived、Derived的friend以及从Derived派生的类知道Derived是从Base派生的。*私有(private)继承是指只有Derived和Derived的friend知道Derived是从Base派生的。由于您使用了私有(private)继承

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

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion通过将类的私有(private)成员转换为空指针然后再转换为结构来访问类的私有(private)成员是否合适?我认为我无权修改包含我需要访问的数据成员的类。如果不符合道德规范,我不想冒险以间接方式访问数据成员。编辑:不得不进一步编辑这个...我很确定这个类不会被修改,所以在那个程度上没关系...我唯一担心的是,如果编写该类的人知道这个,他可能不太满意:(。

c++ - 为什么 Visual Studio 编译器在此示例中允许违反私有(private)继承?

我在VisualStudio2013和2017中发现std::unique_ptr的行为非常奇怪。让我们考虑一个例子:classBase{public:virtual~Base()=default;virtualvoidFoo()=0;};classDerived:privateBase{public:voidFoo()override{std::couta){a->Foo();}Foo(std::unique_ptr(newDerived()));//Compiles请注意,继承是私有(private)的。此示例仅在VisualStudio上编译。而且,虚函数调用是有效的,因为它是公