这是我的代码。即使在类构造函数param1变为3,我也不知道它为什么不打印3。
#include <iostream>
using namespace std;
class A{
int valoare;
public:
A(int param1 = 3):valoare(param1){}
int getValoare(){return this -> valoare;}
};
int main()
{
A vector[] = {*(new A(3)), *(new A(4)), *(new A(5)), *(new A(6))};
cout << vector[2].getValoare();
return 0;
}
答案 0 :(得分:3)
您可能想要了解默认参数:https://en.cppreference.com/w/cpp/language/default_arguments
为具有defualt参数的函数指定参数时,它会覆盖该默认值。因此,您的代码将打印出来。
作为旁注,您的代码存在内存泄漏,因为您使用new
关键字分配了内存,并且从未将其删除。您应该更改Vector的声明,即在堆栈上分配内存,如下所示:
Vector = {A(3), A(4), A(5), A(6)}
答案 1 :(得分:2)
向量中索引2处的元素构造为A(5)
,因此它的值(&#34; valoare&#34;)为5.函数定义中的= 3
是default argument - 如果您自己不指定,则使用该avoid calling new
and delete
explicitly。所以,如果你要写:
std::cout << A().getValoare();
将打印3
。
但是还有一些观察结果:
valoare
表示&#34;价值&#34;用一些拉丁语或欧洲语言,对吧?罗马尼亚人呢?但是 - 不会说那种语言的人不会知道这一点。因为你必须知道英语才能编程,这对于名字来说是一个安全的选择。vector
与std::vector
具有相同的名称,是标准库中的类,或者更确切地说是类模板。试试vec
或my_vector
或其他更具特色的内容。你正在泄露记忆!为什么使用new
创建值?只需使用构造,即
A vector[] = { A(3), A(4), A(5), A(6) };
很好。
更一般地说,你应该RAII-style,而不是更喜欢smart pointers类 - 它们在构造上分配并在销毁时释放。最简单的方法是切换到使用{{3}}
答案 2 :(得分:1)
为什么参数在类构造函数中没有改变?
它不打印值3
,因为您给它另一个值。
来自 cppreference :
在函数调用中使用默认参数代替缺少的尾随参数:
void point(int x = 3, int y = 4); point(1,2); // calls point(1,2) point(1); // calls point(1,4) point(); // calls point(3,4)