如何将没有特定大小的数组声明为类成员?我想在类构造函数中立即设置这个数组的大小。是否可以在不使用堆或不调整数组大小的情况下做这样的事情? 最佳答案 C++标准不允许可变长度数组。您的选择是:使用std::vector或使用指向动态内存的指针请注意,可变长度数组作为扩展被大多数编译器支持,因此如果您不担心可移植性并且您的编译器支持它,您可以使用它。当然它有自己的问题,但考虑到您引用的限制,它是一个选择。 关于c++-如何声明一个没有特定大小的数组?,我们在StackOverflow上找到一
我想实现这样的类:classA{inta;intb;intc;A():a(),b(),c(){};A(intia,intib,intic=ia+ib):a(ia),b(ib),c(ic){};//thisiswhatineed};我想ic的默认值是根据ia和ib计算出来的,这里的代码编译的时候会报错。我想知道是否有办法得到这样的东西。谢谢。 最佳答案 只需添加另一个构造函数重载:A(intia,intib):a(ia),b(ib),c(ia+ib){}A(intia,intib,intic):a(ia),b(ib),c(ic){}对
我有两个类,A和B,B派生自A。A有多个构造函数(下例中有2个)。B有一个额外的成员要初始化(它有一个默认的初始化器)。我怎样才能实现B可以使用A的构造函数之一来构造,而不必手动重写B中A的所有构造函数重载?(在下面的示例中,否则我必须为B提供四个构造函数:B():A(){},B(strings):A(s){},B(intb):A(),p(b){},B(strings,intb):A(s),p(b){},而不是只有两个,至少在忽略默认参数的可能性时是这样)。我的方法是完美转发,但是下面的场景会报错:#include#includestructA{A(conststd::string&a
我需要延迟构造函数调用,这样我就可以初始化应该传递给构造函数的值。我写了一个简短且非常简化的示例。classA{private:ObjectA*_ptr;public:A(ObjectA*);};classB{private:Aobject;//Theconstructorseemstobecalledhere?ObjectA*obj;public:B();};A::A(ObjectA*ptr){this->_ptr=ptr;}B::B(){obj=newObjectA();object(obj);//Iwanttocallthe'A'constructorhere,afterinit
如果我有一个类具有这样的属性:structMyClass{double**arowofpointers;intcapacity;};现在,如果任务说“确保主函数中的这行代码是合法的:MyClassa(10);//makesavariablewhosetypeisMyClassthathasthecapacityof10但是要确保main函数中的下面这行代码是不合法的:MyClassa=10;不过,main函数中的以下代码行应该是合法的:a=b+c;其中a,b,c均为MyClass类型的变量。我应该制作哪些构造函数?我应该在删除时设置什么吗? 最佳答案
假设我有一个带有int指针成员变量“i”的结构“s”。我在s的默认构造函数中为i在堆上分配内存。稍后在代码的其他部分,我将s的实例按值传递给某个函数。我在这里做浅拷贝吗?假设我没有为s实现任何复制构造函数或赋值运算符或任何东西……只是默认构造函数。 最佳答案 跟进@[don.neufeld.myopenid.com]所说的内容,它不仅是浅拷贝,而且(由您选择)内存泄漏或悬挂指针。//memoryleak(notethatthepointerisneverdeleted)classA{B*_b;public:A():_b(newB){
我的问题很简单,下一段代码安全吗?structParent{B*_a;Parent(B*a):_a(a){}};structChild:publicParent{B_b;Child():Parent(&_b),_b(2){};};intmain(){Childc;return0;}还有两点:我对将对成员对象的引用传递给父对象的部分很感兴趣。我所说的安全是指_b将被分配(及其内存地址),并且无论我使用哪种编译器,此代码都可以正常工作。提前致谢。澄清我所说的安全实际上是指内存地址是有效的,因为我已经知道它没有被初始化。其他注意事项在我的实际代码中,我想将B类型的对象存储为指向其基类A的指针
考虑这个具有三个构造函数的类:classCircle{public:Circle(intr){_radius=r;}Circle(constCircle&c){_radius=c.radius();cout使用“g++-std=c++0x”编译。输出是:Copyconstructorwithlvaluereference.Radius:224好的。调用前两种情况的正确构造函数。但是对于第三种情况,即Circlec3(Circle(4)),我期望第三个构造函数,(带右值引用的复制构造函数)被调用,但事实并非如此。显然调用了一些构造函数,因为c3已正确实例化,但我不明白为什么编译器不使用明
ClassA{public:A(inti=0,intk=0){}//defaultconstructorWHY??~A(){}};intmain(){Aa;//Thiscreatesobjectusingdefineddefault//constructorbuttheconstructorstillhastwoargumentsAb(1,2);//Calledasparametrizedone}为什么这个默认参数构造函数是默认构造函数。为什么它不被称为参数化构造函数或默认参数化构造函数,因为即使这个构造函数在没有参数的情况下被调用,它也包含两个参数?是否有任何特定原因或仅仅是因为标准
我只是试图理解以下情况的行为:templatestructA{templateA(T2val){cout所以-类是用T1模板化的,构造函数是用T2模板化的现在-如果我写:Aa=A(true);输出符合预期:sizeof(T1):1sizeof(T2):1但是-如果我写:Aa=A(3.5f);输出是:sizeof(T1):4sizeof(T2):4sizeof(T1):1sizeof(T2):4为什么使用模板参数float调用构造函数两次?谢谢你满足了我的好奇心 最佳答案 如何避免抄袭?在这两种情况下都调用了两个构造函数,但是在第一种