我想运行1000次迭代的程序,所以在main中设置一个1000的计数器.我需要在每次迭代后重新初始化各种变量,并且由于类构造函数已经写出了所有初始化 - 我决定在每次迭代后调用它,每次迭代的结果存储在main中的变量中.
然而,当我打电话给构造函数时,它没有任何影响......我花了一段时间才弄明白 - 但它没有重新初始化任何东西!
我创建了一个与构造函数完全相同的函数 - 因此对象将拥有自己的版本.当我打电话给它时,它按照我的预期重新初始化了一切.
int main()
{
Class MyClass()
int counter = 0;
while ( counter < 1000 )
{ stuff happens }
Class(); // This is how I tried to call the constructor initially.
// After doing some reading here, I tried:
// Class::Class();
// - but that didn't work either
/* Later I used...
MyClass.function_like_my_constructor; // this worked perfectly
*/
}
Run Code Online (Sandbox Code Playgroud)
......有人试图解释我为什么做错了,或者没有用,或者是愚蠢的或者你有什么?我的意思是 - 在心理上,我只是想 - 废话,我可以调用这个构造函数并重新初始化所有这些东西.构造函数(理想情况下)是否仅在创建对象时调用?
我一直在玩指针以更好地理解它们,我遇到了一些我认为我应该能够做到的事情,但却无法理清.下面的代码工作正常 - 我可以输出"a","dog","socks"和"裤子" - 但是如果我想从"袜子"输出'o'怎么办?我该怎么办?
char *mars[4] = { "a", "dog", "sock", "pants" };
for ( int counter = 0; counter < 4; counter++ )
{
cout << mars[ counter ];
}
Run Code Online (Sandbox Code Playgroud)
如果问题在某个地方得到解答,请原谅我 - 有30多页与C++指针相关的问题,我花了大约90分钟查看它们,以及阅读各种(内容丰富的)文章,然后才决定提问.
找到解决方案 - 在5分钟内,感谢大家!
澄清:我的数组的内容是值0-29.所以数组[0] [0] = 0,而数组[29] [0] = 29 ---它们只是测试值.此外,我有一个潜在的解决方案,已经多次发布,将尝试.
递归解决方案:不工作!
说明:将整数time传递给函数.然后它用于提供FOR语句(counter<time)的结束.IF section(time == 0)提供了一个基本情况,递归应该终止,返回0. ELSE部分是递归调用发生的地方:total是头文件中定义的私有变量,在别处.它在其他地方的构造函数中初始化为0.该函数productsAndSales[time-1][0]以递归方式调用自身,再次添加到total,直到基本调用.然后返回总数,然后打印出来.好吧,无论如何,这就是我所希望的.
我想象的是,我会在数组的这一列中添加所有值,并返回值并打印出来.相反,如果返回0.如果我将IF部分设置为"返回1",我注意到它返回2的幂,对于任何值时间.EG:时间= 3,返回2*2 + 1.如果时间= 5,则返回2*2*2*2 + 1.
我不明白为什么它没有返回我期待的价值.我想到的一件事是我试图在返回部分使用私有变量total,以及递归调用...也许这是不可能的?
int CompanySales::calcTotals( int time )
{
cout << setw( 4 );
if ( time == 0 )
{
return 0;
}
else
{
return total += calcTotals( productsAndSales[ time-1 ][ 0 ]);
}
}
Run Code Online (Sandbox Code Playgroud)
迭代解决方案:工作!
说明:将整数time传递给函数.然后它用于提供FOR语句(counter<time)的结束.FOR语句循环遍历数组,将一列中的所有值一起添加.然后返回该值(以及程序中的其他位置,打印出来).完美的工作.
int CompanySales::calcTotals( int time )
{
int total = 0;
cout …Run Code Online (Sandbox Code Playgroud)