草庐IT

ctor-initialiser

全部标签

c# - 从父类ctor调用重写的方法

我尝试从父类的构造函数中调用被覆盖的方法,并注意到跨语言的不同行为。C++-回响A.foo()classA{public:A(){foo();}virtualvoidfoo(){coutJava-回响B.foo()classA{publicA(){foo();}publicvoidfoo(){System.out.println("A.foo()");}}classBextendsA{publicvoidfoo(){System.out.println("B.foo()");}}classDemo{publicstaticvoidmain(Stringargs[]){Bb=newB()

PHP - “instantiated” 和 “initialised” 有什么区别?

我正在阅读一些关于PHP的书籍,并开始着手掌握基础知识。我遇到了“实例化”和“初始化”的词。我找不到解释它们的例子。PHP中的“实例化”和“初始化”有什么区别?他们的意思是什么?如何使用它们?使用它们的目的是什么?如果可能,请提供示例。 最佳答案 您从一个类中实例化一个对象。IE。您创建一个instance(因此得名)。在代码中:$obj=newSomeClass();您初始化一个变量,这意味着“给它初始值(因此得名)”。$var="someValue";事实上,当您实例化时,您也经常初始化它(在构造函数中)。例如://thisin

c++ - GCC 4.4.1 是否因不接受 ctor-initializer 中的注入(inject)类名而出现错误?

GCC4.4.1拒绝在ctor-initializer中找到我的injected-class-name:templatestructBase{Base(intx){}};structDerived:Base{Derived():Base(2){}};intmain(){Derivedd;}test2.cpp:Inconstructor"Derived::Derived()":test2.cpp:9:error:class"Derived"doesnothaveanyfieldnamed"Base"test2.cpp:9:error:nomatchingfunctionforcallto

c++ - 如何调用类的默认构造函数,其构造函数由具有所有默认参数的 ctor 提供?

在C++primer5Thedition中说,为所有参数提供默认参数的构造函数也定义了默认构造函数:classPoint{public://Point();//noneedtodefineithere.Point(intx=0,inty=0):x_(x),y_(y){std::cout正如你在上面看到的,出于某种原因我想调用默认构造函数Point()而不是Point(int,int)但我得到的是后者而不是默认构造函数导演?!那么是否可以调用一个为所有参数提供默认实参的构造函数提供的类的默认构造函数呢?谢谢。 最佳答案 一个类最多可以

c++ - 数组对象初始化,其类具有一些 ctor/dtor

我想通过如下初始化语句实现数组对象的初始化。TestClassarray[5]={TestClass("test1"),TestClass("test2"),TestClass("test3"),TestClass("test4"),TestClass("test5")};根据一些权威书籍如ARM(annotatedreferencemanual)forC++,似乎说这是初始化具有构造函数/析构函数的对象数组的方法。在此之后,我刚刚创建了以下示例代码,看看会发生什么。#include#include#includeclassTestClass{public:TestClass(cons

c++ - 在派生类中使用基类 Copy CTOR

我知道有很多关于这个主题的帖子,但我找不到任何帖子来完全回答我的问题。假设我有一个基类和一个派生类,我为它实现了一个CCtor和一个赋值运算符,如下所示:classBase{char*name;....Base(constBase&other):name(nullptr){*this=other}voidoperator=(constBase&other){...Deepcopyofname}}classDerived:publicBase{....Derived(constDerived&other){*this=other;}voidoperator=(constDerived&o

c++ - 为什么我不能将 =default 用于带有成员初始值设定项列表的默认 ctors

考虑以下类:classFoo{inta,b;public:Foo():a{1},b{2}{}//Defaultctorwithmemberinitializerlist//Foo():a{1},b{2}=default;//Doesnotworkbutwhy?};(编辑:因为在几个答案中提到了它-我知道类内成员初始化器,但这不是这里的重点)我认为第二个ctor定义会更优雅并且更适合现代C++代码(另请参见whyyoushoulduse=defaultifyouhavetobeexplicitaboutusingthedefaultsemantics)。但是,似乎没有通用编译器接受它。c

c++ - 除了分配和 ctor 调用之外,C++ new 运算符还做什么?

除了分配内存和调用构造函数之外,new运算符还做了哪些其他事情? 最佳答案 C++标准对来自的new运算符的单个对象形式(通常使用的形式)有这样的说法。header:Requiredbehavior:Returnanonnullpointertosuitablyalignedstorage(3.7.3),orelsethrowabad_allocexception.Thisrequirementisbindingonareplacementversionofthisfunction.Defaultbehavior:—Executes

c++ - 是否可以使用 operator new 和 initialiser 语法初始化非 POD 数组?

我刚刚阅读并理解IsitpossibletoinitialiseanarrayinC++11byusingnewoperator,但这并不能完全解决我的问题。这段代码在Clang中给我一个编译错误:structA{A(intfirst,intsecond){}};voidmyFunc(){newA[1]{{1,2}};}我希望{{1,2}}用单个元素初始化数组,然后用构造函数参数{1,2}初始化,但我得到这个错误:error:nomatchingconstructorforinitializationof'A'newA[1]{{1,2}};^note:candidateconstruc

c++ - 返回不可移动、不可复制的对象时 ctor{} 和 {} 之间的区别

这是我想出的情况:#includeusingnamespacestd;structtest{test(){couttest{return{};//returntest{};}automain()->int{f();}此代码可同时使用clang和gcc进行编译,但当我将return{}更改为returntest{}时,它不再编译。这是为什么?在这两种情况下它不应该一样工作吗?坦率地说,我不知道这是否有好的用例,但它让我感到惊讶,所以现在我想知道发生了什么。 最佳答案 return{}使用一个空的初始化列表来初始化返回值,使用默认构造函