草庐IT

publication

全部标签

c++ - 具有公共(public)非虚拟析构函数的类是否应标记为 "final"?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion要关闭选民,请帮助我改进问题以便重新打开:HowcanIimprovethisquestionsothatitgetsreopened?赫伯萨特wrote:Abaseclassdestructorshouldbeeitherpublicandvirtual,orprotectedandnonvirtual.根据该指南,如果您有一个带有公共(public)非虚拟析构函数的类,则不应将该类用作

C++ const public 字段与 getter 方法

我想为某个类的每个对象添加唯一ID(在单个session中)。一种解决方案是使用增加一些静态计数器的工厂函数。一个更简单的解决方案是将这个计数器添加到类本身,例如:classfooWithUniqueId{public:fooWithUniqueId():id(next_id++){...};longid;private:staticlongnext_id=0;}然而,一个缺陷是id字段是公共(public)的,并且可以由调用者更改,因此违反了它的唯一性。传统的(好吧,至少在我看来)是将id设为私有(private),并使用getter函数来访问它,因此:classfooWithUni

c++ - 当 "virtual"位于 "class Foo : public virtual Bar"而不是 "virtual void frob()"时,这意味着什么?

我在成员函数的上下文中理解virtual,例如virtualvoidfrob()。但它在类声明的上下文中意味着什么,例如classFoo:publicvirtualBar?对于给定的方法,有8种情况源于以下三个位置是否存在virtual:1)父类(superclass)的函数;2)这个类的继承链;3)该类的功能。我想我理解1)和3)是如何相互作用的,但是2)似乎是多余的。是吗?我有什么不明白的? 最佳答案 那是virtualinheritance,当你知道你将进行多重继承时,你就会这样做。该页面有更多详细信息。

c++ - 当构造函数是私有(private)的时使用公共(public)析构函数

我见过这样的代码,其中构造函数被声明为私有(private)的,而析构函数是公共(public)的。这样的声明有什么用?析构函数是否需要公开以便在继承期间可以进行调用,还是代码中的错误?这个问题的信息似乎有点少,但我真正想知道的是,当构造函数需要私有(private)时,是否有公共(public)析构函数遵守C++规则? 最佳答案 简答将构造函数创建为私有(private)但将析构函数创建为公共(public)有很多实际用途。您可以使用此范例来:强制引用计数(SeeHiteshVaghani'sexample).实现singleto

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++ - 为什么基指针只能在公共(public)继承下指向派生对象?

我认为这是因为基类数据成员和方法将无法访问,但我想更清楚地了解这一点。另外,这是否就是多态性(使用虚函数)只有在公共(public)继承下才有可能的原因? 最佳答案 实际上,即使基类是私有(private)的,指向基类的指针也可以指向派生类。问题是这样的转换在课外是不可能的。但是,仍然可以在可访问基础的上下文中执行此类转换。例子:#includeusingnamespacestd;structBase{voidfoo()const{coutfoo();}LiveexampleLiveexamplewithvirtualcall

c++ - 非公共(public) C++ 继承在实践中的使用频率是多少?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:WhenshouldIuseC++privateinheritance?我想创建这个社区维基,但没有看到按钮...有人可以添加吗?我想不出我以非公开方式从类派生的任何情况,而且我不记得副手看到过这样做的代码。我想听听它有用的真实示例和模式。

guava - 在 Kotlin 中,如何委托(delegate)给一个接口(interface)并只提供一个无参数的公共(public)构造函数?

问题源于Kotlinclassdelegation只允许委托(delegate)给构造函数参数,因此似乎迫使您为构造函数提供参数。下面是我关于这个问题的具体用例的原始问题。我想做以下事情:valmyTable1:MyTable=MyTable()在哪里MyTable继承自ImmutableTable(src)或至少Table而且我不必手动将所有Table方法委托(delegate)给某个基本实现。我还想避免以下情况:valmyTable2:MyTable=MyTable.build()即我不想被迫使用伴随对象/静态工厂方法。我试图扩展ImmutableTable,但我得到这个类型有一个

guava - 在 Kotlin 中,如何委托(delegate)给一个接口(interface)并只提供一个无参数的公共(public)构造函数?

问题源于Kotlinclassdelegation只允许委托(delegate)给构造函数参数,因此似乎迫使您为构造函数提供参数。下面是我关于这个问题的具体用例的原始问题。我想做以下事情:valmyTable1:MyTable=MyTable()在哪里MyTable继承自ImmutableTable(src)或至少Table而且我不必手动将所有Table方法委托(delegate)给某个基本实现。我还想避免以下情况:valmyTable2:MyTable=MyTable.build()即我不想被迫使用伴随对象/静态工厂方法。我试图扩展ImmutableTable,但我得到这个类型有一个

github报错Key is invalid. You must supply a key in OpenSSH public key format

原因:由于github官方提示普通类型的ssh不安全,所以改成OpenSSH解决办法第一步:打开终端。粘贴下面的文本,替换为您的GitHub电子邮件地址。连续按回车键ssh-keygen-ted25519-C"your_email@example.com"第二步:将SSH密钥添加到ssh-agent在后台启动ssh-agent。eval"$(ssh-agent-s)"在你的~/.ssh/目录创建config文件touchconfig在config中添加内容1#---localhostGenerated---#设置你自己的github账户名称HostzhrgithubHostNamegithub