私のプログラミングのクラスでは、コード サンプルに基づいたテストとクイズを行い、最終的な出力を決定する必要があります。通常、それらはトリッキーなコードであり、気が付く頃には、ランダムな機能に行き詰まっており、自分が何をしているのかわかりません。
紙の上でコードを正しく実行するにはどうすればよいでしょうか? ループ、変数、関数、すべてを追跡していると、混乱します。
たとえば、これは私たちが過去に行ったクイズで、100% 正解しましたが、永遠に時間がかかり、非常に厄介でした。
#include <iostream>
#include <cstring>
using namespace std;
class foo {
char word[20];
int qty;
public:
foo( ) { set(3, 5); }
foo( int m, const char * s) { set(m, m+1);
strcpy(word, s); }
foo( const foo& a ) { cout << "... hahaha.1" << endl;
qty = 3 + a.qty;
strcpy( word, a.word );
strcat( word, ".5.6.7" );
cout << "... hahah.2" << endl; }
~foo( ) { cout << qty << "," << word << "!!!" << endl; }
void set(int a, int b){ qty = a + b;
strcpy( word, "summer" ); }
void wow();
void output(){ cout << word << "," << qty << endl; }
};
void hello( foo& );
void greet( foo );
int main() {
foo x, y(100, "QUIZ");
greet( y );
cout << "a.b.c.d.e." << endl;
hello( x );
x.output();
y.output();
cout << "...the end" << endl;
return 0;
}
void foo::wow() { strcat(word,".1.2.3");
qty += 4; }
void greet( foo g ) { cout << "...HI.1\n";
g.wow();
g.output();
cout << "...HI.2\n"; }
void hello(foo & h) { cout << "...hello.1" << endl;
foo e;
e = h;
h.wow();
h.output();
e.output();
cout << "...hello.2\n"; }