Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++创建构造函数和类实例的最佳方法 我对C++语言很陌生,但是我对Python有一定的经验,对java有点了解。 P>因为C++是非常压倒性的,而且总是有一些方法来实现某些行为,我有2个与OOP有关的问题。_C++_Oop - Fatal编程技术网

C++创建构造函数和类实例的最佳方法 我对C++语言很陌生,但是我对Python有一定的经验,对java有点了解。 P>因为C++是非常压倒性的,而且总是有一些方法来实现某些行为,我有2个与OOP有关的问题。

C++创建构造函数和类实例的最佳方法 我对C++语言很陌生,但是我对Python有一定的经验,对java有点了解。 P>因为C++是非常压倒性的,而且总是有一些方法来实现某些行为,我有2个与OOP有关的问题。,c++,oop,C++,Oop,使用参数创建类构造函数的最佳方法是什么? 例如,假设我们有这样的东西: 结构测试{ int x; int-y; }; 构造函数有两种常用的方法: 一, 我应该使用哪一个?为什么 哪种样式更像C++来创建类对象?为什么? Test*testptr=newtest1,1 vs 创建结构的最简单的C++方式是struct_name{value1,value2}。您不需要声明自己的构造函数。 如果您确实想使用构造函数,请使用带有初始值设定项语法的构造函数。这就是区别。让我们考虑一个具有两个字段的结构。所

使用参数创建类构造函数的最佳方法是什么? 例如,假设我们有这样的东西:

结构测试{ int x; int-y; };

构造函数有两种常用的方法:

一,

我应该使用哪一个?为什么

哪种样式更像C++来创建类对象?为什么? Test*testptr=newtest1,1

vs

创建结构的最简单的C++方式是struct_name{value1,value2}。您不需要声明自己的构造函数。 如果您确实想使用构造函数,请使用带有初始值设定项语法的构造函数。这就是区别。让我们考虑一个具有两个字段的结构。所以它看起来像:{1,2}。当您使用初始值设定项语法时,您将在花括号之间编写的实际构造函数代码之前立即创建所需的结构。看起来:{1,2}我们现在有了值。但是,当您在构造函数主体内初始化这些字段时,它将首先使用默认值创建一个结构,然后更改它们。看起来:{0,0}…构造函数正在工作。。。{1,2}. 好的,最后一件事是参数声明。您应该使用常量引用,因为它可以防止程序员在函数体中更改这些参数,并且这些变量是通过引用传递的,而不是复制的。让我们看两个例子:

void fun1(int a, int b);
void fun2(const int& a, const int& b);
fun1在此复制这两个参数,然后在体内使用它们。但是,fun2只获取对变量的引用,并直接处理它们的值。此外,由于常量,您无法更改它们,因此它是完全安全的

现代C++不喜欢新的操作符。我们只在构造函数中使用它,并在析构函数中调用delete操作符。但是,不建议在其他情况下使用新操作符,因为它更难防止内存泄漏,并且违反了习惯用法。如果你真的必须使用原始指针,那么考虑把它们放进去。
对于这个结构,您可能不需要或不想要构造函数。您可以创建一个变量,如Test myTest{2,3};这将初始化x为2,y为3。对于这样的结构,我可能会在问题2中使用这两个选项。再次使用Test myTest{2,3};大多数时候。使用C++中的新内容是不必要的,这是一个小的结构。它取决于选择哪种情况。您可能需要std::unique_ptr,这可能会有所帮助,但它出现在c++11之前,其中包括智能指针和一个不鼓励使用新的和原始的指针的转变:请每个问题问一个问题。你有两个完全不同的问题。太好了!这就是我想听的。当我有很多字段要初始化的复杂类,但也有一些方法要调用时,使用构造函数怎么样。我应该仍然使用initalizer语法吗?2.好的,所以使用原始指针+新指针是有风险的,而且没有必要。然而,Test=Test1,1;可能是无效的,那么使用unique_ptr来创建类实例如何?使用const int&而不是int的部分是毫无意义的。另外,虽然使用init list的建议很好,但是关于{0,0}…构造函数的解释是有效的。。。{1,2}对于这种特殊情况是不准确的。@RobertKwiatkowski不使用普通或智能指针,除非您有充分的理由。新技术效率低下。测试=测试1,1;是有效的,但太冗长了。好的,但请记住,这个测试只是过于简单。我想知道,当我有许多字段、方法等时,我应该如何初始化类实例,以及如何处理简单的结构,多亏了你们,我现在知道了这些。@RobertKwiatkowski,1。如果可以,最好立即初始化字段。如果您需要进行额外的计算,请将该代码放入构造函数的主体中。2.不,实际上它比使用指针更有效。取消引用会导致性能问题,所以您不应该每次都使用它,顺便说一句,编译器通常会自行选择放置变量的位置。检查线程以获取更多信息。
   Test(int x1, int y1) {
     x = x1;
     y = y1;
     // rest of constructor
   }
Test test = Test(1, 1);
void fun1(int a, int b);
void fun2(const int& a, const int& b);