草庐IT

final-class

全部标签

c++ - 如何让 boost::make_shared 成为我类(class)的 friend

我编写了一个带有protected构造函数的类,因此只能使用静态create()函数生成新实例,该函数将shared_ptr返回我的类。为了提供有效的分配,我想在create函数中使用boost::make_shared,但是编译器提示说我的类构造函数在boost::make_shared中受到保护。我决定让我的boost::make_shared成为我类的friend,但我对语法感到困惑。我试过了templatefriendboost::shared_ptrboost::make_shared(constConnectionManagerPtr&,conststd::string&)

c++ - 我什么时候应该为我的类(class)提供析构函数?

这似乎是一个相当微不足道的或至少是常见的问题,但我无法在google或SO上找到令人满意的答案。我不确定什么时候应该为我的类实现析构函数。一个明显的情况是当类包装到文件的连接时,我想确保连接已关闭,因此我在析构函数中关闭它。但我想知道一般情况下,我怎么知道是否应该定义析构函数。有哪些指导方针可以检查我是否应该在这个类中使用析构函数?我能想到的一个这样的准则是,类是否包含任何成员指针。默认析构函数会在删除时销毁指针,但不会销毁它们指向的对象。所以这应该是用户定义的析构函数的工作。例如:(我是C++新手,所以这段代码可能无法编译)。classMyContainer{public:MyCon

c++ 类继承,未定义对 'Class::Constructor()' 的引用

编辑:在底部发布固定代码。感谢大家的帮助!我刚刚学习C++,但在继承方面遇到了麻烦。我已经搜索和搜索并尝试了所有可能的方法,但我无法在保留我希望它具有的功能的同时编译此代码。我觉得我犯了一个愚蠢的错误,或者我可能只是错过了一些重要的概念,但如果有人能看一下它,我将非常感激!如果我注释掉StarSystemConstructor中创建对象的3行,那么它会编译,所以我知道这与问题有关。#include#include#include#include#includeusingnamespacestd;classSystemBody{public:SystemBody();intsystemb

c++ - 重载父类(super class)的函数

C++标准中有什么东西阻止我重载父类(superclass)的函数吗?从这对类开始:classA{//superclassintx;public:voidfoo(inty){x=y;}//originaldefinition};classB:publicA{//derivedclassintx2;public:voidfoo(inty,intz){x2=y+z;}//overloaded};我可以轻松调用B::foo():Bb;b.foo(1,2);//[1]但是如果我尝试调用A::foo()...Bb;b.foo(12);//[2]...我收到一个编译器错误:test.cpp:Inf

C++ 自动类型转换 : wrong behaviour for a container class

我正在为非常小的常量vector和矩阵上的线性代数运算实现一些类。目前,当我这样做时:MyMathVectora={1,2,3};MyMathVectorb={1.3,2.3,3.3};std::cout然后First={2,4,6}和Second={2.3,4.3,6.3},因为第二个元素被编译器转换为第一个元素类型。是否有任何“简单”的方法来提供与nativeC++中相同类型的自动转换:int+double=double,double+int=double?非常感谢。编辑:使用答案给出的语法,我让operator+工作了。但我尝试了以下语法,编译失败并出现错误:expectedat

c++ - 跨文件共享静态变量 : namespace vs class

这里有很多关于静态与全局的问题,但我认为我的问题有点不同。我想知道是否有一种方法可以像类中的静态变量那样跨文件共享放置在命名空间中的变量。例如,我这样编码://Foo.hclassFoo{public:staticintcode;staticinttimes_two(intin_);};namespacebar{staticintkode;}-//Foo.cppintFoo::code=0;intFoo::times_two(intin_){bar::kode++;code++;return2*in_;}-//main.cppintmain(){cout代码和kode的所有结果:Foo

kotlin - 将 Kotlin 的 KClass 转换为 Java 中的常规 Class

我正在尝试在Java代码中调用常规Java方法,如下所示:publicTproxy(KClasskClass){//unfortunatelynothinglikegetJavaClass()existsreturn(T)proxy(kClass.getJavaClass());}publicTproxy(ClassjClass){return(T)context.getBean(jClass);}在Kotlin中,您可以在每个KClass上调用.java。这不是这里的情况,我无法从KClass中提取JavaClass对象。有办法吗?编辑:这在Kotlin中是微不足道的,但我正在寻找J

kotlin - 将 Kotlin 的 KClass 转换为 Java 中的常规 Class

我正在尝试在Java代码中调用常规Java方法,如下所示:publicTproxy(KClasskClass){//unfortunatelynothinglikegetJavaClass()existsreturn(T)proxy(kClass.getJavaClass());}publicTproxy(ClassjClass){return(T)context.getBean(jClass);}在Kotlin中,您可以在每个KClass上调用.java。这不是这里的情况,我无法从KClass中提取JavaClass对象。有办法吗?编辑:这在Kotlin中是微不足道的,但我正在寻找J

class - Class< 的语法是什么?在 kotlin 中扩展 class_name>?

我正在尝试创建一个接受从Word_Class继承的任何类变量但它不起作用的Arraylist:varlst=ArrayList>();lst.add(Class);我正在寻找Class 最佳答案 您可以使用outtypeprojection在Kotlin。它相当于?扩展Java中的T,例如://v---outtypeprojectionvarlst=ArrayList>()要获得一个Java类你应该使用KClass#java,例如://v---getaKClassinstancelst.add(Noun_Class::class.j

class - Class< 的语法是什么?在 kotlin 中扩展 class_name>?

我正在尝试创建一个接受从Word_Class继承的任何类变量但它不起作用的Arraylist:varlst=ArrayList>();lst.add(Class);我正在寻找Class 最佳答案 您可以使用outtypeprojection在Kotlin。它相当于?扩展Java中的T,例如://v---outtypeprojectionvarlst=ArrayList>()要获得一个Java类你应该使用KClass#java,例如://v---getaKClassinstancelst.add(Noun_Class::class.j