代碼1:node
#include <stdio.h> #include <iostream> using namespace std; class node{ public: node(); ~node(); private: int num; node* next; }; int main() { //runtiem error //node* p1 = new node; //runtime error //node* p2 = new node(); //runtiem error //node n1; node n2(); return 0; }
解決上面的問題很容易,只要把構造函數和析構函數實現了就行。ios
代碼2:函數
#include <stdio.h> #include <iostream> using namespace std; class node{ public: node(){cout << (counter++) << endl;} ~node(){}; private: static int counter; int num; node* next; }; int node::counter = 1; int main() { cout << "p1:"; node* p1 = new node; cout << "p2:"; node* p2 = new node(); cout << "n1:"; node n1; cout << "n2:"; node n2(); return 0; }輸出:
p1:1 p2:2 n1:3 n2:這樣咱們能夠發現爲何代碼1中最後一條語句不報錯了,它實際上是一句 函數聲明。
從代碼1和代碼2中獲得一個體會和兩個問題:spa
體會是在類的聲明中寫構造函數和析構函數的時候須要實現。code
問題是1.node n1;這句語句是變量的聲明仍是定義,是在定義的時候就初始化了?2.node* p1 = new node;和node* p2 = new node();這兩句語句有什麼不一樣?
io