日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实现CStack类遇到的问题

發布時間:2025/3/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现CStack类遇到的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

????????自己動手編寫一個CStack類,包括頭文件CStack.h以及源文件CStack.cpp。

????????遇到了幾個問題:

????????1.每個文件都要寫using namespace std;沒寫的文件會報錯:缺少類型說明符……(這不是廢話嗎。。可是我就是這樣報錯許久。。。)

????????2.class CStack的定義放在.h中,在.cpp文件中不能再重復該定義,否則編譯會報錯(class重復定義)。.cpp文件只要包括class中的各個未定義成員函數的定義即可。

????????3.在class定義中定義的成員函數默認是inline函數(即使不顯示聲明inline)。如果一個inline函數會在多個源文件中被用到,那么必須把它定義在頭文件中。如果不會在多個源文件中用到,則class中未定義的成員函數(即.h文件中只聲明且沒有顯示聲明inline的成員函數)也可以在.cpp文件中定義的時候加上inline,或者聲明和定義時都加上inline都可以(即可以正常編譯及運行)!但是還是建議將inline函數的定義放在頭文件中。

????????先上代碼:

????CStack.h:

#pragma?once?//保證頭文件只被編譯一次 #include?<vector> #include?<string>using?namespace?std;class?CStack { public:CStack(void);~CStack(void);bool?push(const?string&?elem);bool?pop(string?&elem);bool?peek(string?&elem);bool?empty();bool?full();int?size(){return?_stack.size();} private:vector<string>?_stack; };

????CStack.cpp:

#include?"CStack.h"using?namespace?std;boolCStack::push(const?string&?elem){if(full()){return?false;}_stack.push_back(elem);return?true; }bool?CStack::full(){return?_stack.size()?==?_stack.max_size(); }bool?CStack::pop(string?&elem){if(empty()){return?false;}elem?=?_stack.back();_stack.pop_back();return?true; }bool?CStack::peek(string?&elem){if(empty()){return?false;}elem?=?_stack.back();return?true; }inline?boolCStack::empty(){return?0?==?_stack.size(); }CStack::CStack(void){ }CStack::~CStack(void){}

????????#ifndef與#pragma once的區別:

????????#ifndef的方式依賴于宏名字不能沖突,這不光可以保證同一個文件不會被包含多次,也能保證內容完全相同的兩個文件不會被不小心同時包含。當然,缺點就是如果不同頭文件的宏名不小心“撞車”,可能就會導致頭文件明明存在,編譯器卻硬說找不到聲明的狀況。

#pragma once(貌似微軟編譯器獨有,不支持跨平臺)則由編譯器提供保證:同一個文件不會被編譯多次。注意這里所說的“同一個文件”是指物理上的一個文件,而不是指內容相同的兩個文件。帶來的好處是,你不必再費勁想個宏名了,當然也就不會出現宏名碰撞引發的奇怪問題。對應的缺點就是如果某個頭文件有多份拷貝,本方法不能保證他們不被重復包含。當然,相比宏名碰撞引發的“找不到聲明”的問題,重復包含更容易被發現并修正。

方式一由語言支持所以移植性好,方式二 可以避免名字沖突。


轉載于:https://my.oschina.net/handsomedz/blog/661874

總結

以上是生活随笔為你收集整理的实现CStack类遇到的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。