在我的編程課上,我們有基於代碼示例的測試和測驗,我們必須經過並確定最終輸出。通常他們是棘手的代碼片段,當我意識到時,我被困在一些隨機函數中,不知道我在做什麼。在紙上走過C++代碼,你會怎麼做?
如何正確運行紙上的代碼?跟蹤循環,變量,函數,一切,這讓我感到困惑。
例如,下面是過去測驗,我們有,我就得到了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"; }
很難知道該說什麼超越「讀它,理解它。」 – 2013-03-24 23:20:21
練習,練習,練習... – jalf 2013-03-24 23:20:30
做筆記,直接對部分代碼進行註釋,將代碼拆分成小塊,繪製調用樹/圖,繪製狀態機,展開/摺疊調用樹/圖的細節級別,以便您可以看到相關,不能看到什麼不是。跟蹤你的進度,這樣你就不會陷入無止境的循環,自己一遍又一遍地重複同樣的工作。 :)是的,練習,練習和練習。 – 2013-03-24 23:24:37