2009年4月5日 星期日

C/C++的Const(上)

一般說到const 只會想到常數

也就是類似 const int a;

但是const在c/c++裡面 扮演了一個小兵立大功的角色

const用到函數、類別、指標時 他會變成一個非常強大的修飾子

但一方面常常有感 我學了很多語言 const的神卻只在c/c++看的到

java或C#以及ActionScript、PHP等弱型別語言他經常無用武之地

c/c++雖然強大也不免感慨,他跟目前主流商用程式語言上的差別

也罷 自少c/c++大概可以在戰幾十年

先來談談指標上 const的用法


const int* i; (1)
int const* i; (2)
int* const i; (3)
int* i; (4)
const int*const i; (5)

(4)個是原生型態 就是都不加的情況,這時候指標i所指的位址幾及該位址內容是可改的
(1)跟(2)兩個是一模一樣的東西 主要判斷方式是const再星號左邊,代表的是指標i指向的內容為常數不可改,但是指向位置可改
也就是

*i=3; //X

像這樣從新指派內容是不可以的,但是

i=new int; //O

這是可行的,可以從新指向一個新的地方

而(3)則是代表指標i所指的內容可改,但是指向位置不可改,判斷方法是const在星號右邊
此時
i=new int;\\X
從新指向另一個位置是不可行,但是
*i=100;\\O
從新更改該位址內容卻是可以

置於(4)則是指向內容跟指向位置都不可改,就像是宣告一般常數一樣

const i;


附帶一提,我們常用的陣列,其實就是宣告一個位置不可改的指標

int arr[10];

就等效於

int* const arr=new int[10];


今天到此為止

const在函數及類別的用法 下回再說吧

資管與資工

從資管跳來資工也有一段時間了

深深體會兩者本質上的差異

常常有人問資管跟資工有什麼不同

真要說的話
資管:去學將電腦的技術運用到企業上
資工:去學電腦本身的科技

一者學應用,一者學科學

以資管來說,資管人比較適合投入職場 所以大部分的資管人都相當的活潑

而資工呢...則適合去做研究,資工窮其一生都在研究怎麼提出更有效率的演算法

所以相較於資管,資工人通常都比較死板,感覺上死氣沉沉的

就以做PowerPoint來說好了,通常資工的的PowerPoint只要求簡單明瞭、條列分明說難聽點就是非常死版

而資管則是力求表達主旨,所以通常都會以生動的外表來做訴求,基本上就是把報告當企劃書在做,但是常常流於外表沒啥實際內容

兩者是各有優缺,不過也常常有特例(俺就是)

2009年3月13日 星期五

C++ NULL及封裝

最近開始碰好久沒玩的C++
果然程式這東西要常碰 不然沒多久就忘光光了
原本要用NULL的makefile卻一直出現錯誤
不像java直接就可以用 NULL不是C++的原生型別
要使用之前要先include stdio才可以
#include <stdio.h>

然後要弄封裝 java碰多了都忘了C++要怎麼封裝
直接用範例來說明吧
Stack.h

class Stack{
public:
Stack();
void push(int x);
int pop();
}

Stack.cpp

#include "Stack.h"
Stack::Stack(){...}
void Stack::push(int x){...}
int Stack::pop(){...}

2009年3月11日 星期三

ubuntu安裝JRE來用eclipse

因為作業需求用Linux寫c++
我之前ubuntu明明可以使用eclipse寫c++
但是這次從新安裝後就不行
原來是需要JRE跟g++
之前安裝ubuntu有用懶人包 他已經幫我裝好了
但是這次我必須自己裝
因為懶人包會改我的source.list 讓很多東西都怪怪的
所以還是自己裝安心點
安裝jre
sudo apt-get install sun-java6-jre sun-java6-jdk
輸入指令後就會安裝
之後再輸入以下指令更新jvm即可
sudo update-alternatives –config java
之後再用

sudo apt-get install g++
sudo apt-get install g++ build-essential



來安裝g++套件
值得一提的是 是用eclipse開發c++強迫一定得用cpp副檔名
否則會有大大小小奇怪問題