【Coding】C++詭異問題之一

代碼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

相關文章
相關標籤/搜索