顯示具有 類別 標籤的文章。 顯示所有文章
顯示具有 類別 標籤的文章。 顯示所有文章

2010年2月6日 星期六

C/C++筆記-複製建構式與解構式

解構式
stack::~stack(){}

複製建構式

stack::stack(const stack& old_stack);

##ReadMore##
範例:
stack a_stack;
a_stack.push(2);
stack b_stack(a_stack); //複製a-stack資料給b_stack

C/C++筆記-explicit 明確的建構式

explicit要求建構式寫法必須一般化

/*可使用兩種方式來建構*/
class ex1
{
  ex1(int size);
}
ex1 init1(10);
ex1 init2 = 10;


/*只可使用一種方式來建構*/
class ex2
{
  explicit ex2(int size);
}
ex2 init1(10);
##ShowAll##

2009年12月19日 星期六

JAVA筆記-靜態內部類別的存取權限

一般類別+內部類別+static的存取關係真是複雜
難怪當初看JAVA我會不由自主的想先跳過
沒事不要寫這麼複雜關係的程式碼,
如果要用到一本書要放在旁邊就是了

靜態外部類別的內部類別同樣是被放在Global記憶體區塊,
所以內部類別不管有沒有宣告static,都可互相看見而存取
(其實一般使用靜態類別時,本身內部就沒有設定static,
成員變數本來就互相看見,多設定一道static,
它還是放在Global記憶體內,當然還是會可以看見)

靜態類別本身是沒有this指標,也不需要new建立實體
但靜態內部類別的non-static成員會有this指標指向自己,
(這一段話我感到有點含糊,靜態內部類別裡的non-static成員為什麼會有this指標?)
所以靜態內部類別可以同時定義static和non-static成員,
因此,也可用new來建立靜態內部類別的實體

class MyOuter {
  private int x = 7;
  static private int sx = 9;

  static class MyStatic {
    private int x = 77;
    static private int sx = 99;
    public void fooA() { // non-static member
      System.out.println("static inner class A.");
      System.out.println(sx); //
      System.out.println(MyOuter.sx); //
      System.out.println(x); //
      System.out.println(this.x); //
      //static inner class中沒有MyOuter的this指標
      //System.out.println(MyOuter.this.x);
    }

    public static void fooB() { // static member
      System.out.println("static inner class B.");
      System.out.println(sx);
      System.out.println(MyOuter.sx);
    }
  }
}

public class StaticInnerClass {
  public static void main(String[] args) {
    //MyOuter.MyStatic.fooB();
    MyOuter.MyStatic s = new MyOuter.MyStatic();
    s.fooA();
    s.fooB();
  }

執行結果:
99
9
77
77

99
9

JAVA筆記-用匿名內部類別來實作介面

內部類別沒有實際練習過,雖然看懂了用法,
但還是感到含糊,不知道要在怎樣的情況下運用
適合用在程式只會用到一次就不需再使用類別的情況
##ReadMore##
interface Pet {
  void skill();
  void move();
}
public class AnonymousClass {
  public static void main(String[] args) {
    Pet p = new Pet()
    {
      public void skill(){
        System.out.println("我會握手 !");
      }
      public void move(){
        System.out.println("我會跑步 !");
      };
    };
    p.skill();
    p.move();
  }
}

2009年12月11日 星期五

JAVA筆記-介面與抽象類別的差異

介面與抽象類別內的皆可宣告抽象方法,
且不可直接建立實體,必須由其他類別來實作出來,
所以也容易混淆

目的上 =>
interface是制定訊息接收者的規格,模擬類別的多重繼承
abstract class則是制定部分物件的規格,並且制定訊息接收者的規格,為多型作準備。

使用上 =>
interface用來被實作,abstract class則是用來被繼承

概念上 =>
abstract class:
可以想像手機物件基本上該有哪些功能,然後將那些功能名稱定義好,
一定也有一些功能是所有手機都一樣的!也可以先都寫好。     
定義好之後,開發手機軟體的廠商就可以依據這些已定義好的method來撰寫
interface:
顧名思義就是不同系統、或是不同世界的中介橋樑,   
只注重介面格式,而不理會實作內容。   
如:人跟電腦的溝通介面是什麼?螢幕、鍵盤、滑鼠等...     
人跟手機的溝通介面是什麼?螢幕、鍵盤等...   
所以一個物件可以有很多個介面,像手機的鍵盤面板,   
今天高興換紅色,明天工作開心換藍色,
因為介面是一樣的,所以可以隨便更換面板。

差異上 =>
1.
interface的方法全都是抽象方法
abstract則有一般方法和抽象方法
抽象方法指的是沒有「實作」出來的方法
2.
interface與abstract類別都不能直接用來建立物件實體,
必須由一個標準類別來繼承它,實作其抽象方法,
然後再以此建立物件實體。
3.
interface可多重繼承interface
abstract只能單一繼承
3.
interface沒有建構子
abstract有建構子
4.
interface沒有內建的super與this變數
abstract有內建的super與this變數
5.
interface的成員變數全都是static final型式
abstract類別的成員變數比照一般類別
6.
interface內的方法只可封裝public、default
abstract內的方法只可封裝public、default、protected
7.
需要使用迂迴的方式去找出實體類別間的對應關係,
所以與抽象類別的速度相比之下較為緩慢

介面與類別一起使用的參考想法 =>
先為了某些機制建立一個介面,然後再設計一個抽象類別實作這個介面

JAVA筆記-abstract class抽象類別,由子類別實作

宣告型式:
[存取修飾元] abstract class 類別名稱 [implements ...] [extends ...]

抽象類別由子類別用extends來實作,不可用new建立實體
抽象類別內的方法可以使用一般方法和抽象方法,
而抽象方法要加abstract,
並且不可用private,因為子類別無法實作沒有道理

abstract class Car {
  public void power(){}
  abstract void move();
}
public class Tank extends Car{
  public void move(){
    Syatem.out.println("Track");
  }
}

2009年11月13日 星期五

JAVA筆記-關於static成員

static只能用在類別裡,
不能使用在方法之內,
方法內也不能再定義方法

類別內,static不可呼叫non-static,只可呼叫static,
non-static則都可,
因static不需要被建立就可執行,
亦即static成員中根本沒有隱含的this參考指標指向物件,
但non-static卻未被建立,必須先new出來才可用
public class Test {
  void a() {
    b(); //正確
    d(); //正確
  }
  void b() {}
  static void c() {
    b(); //錯誤,不可直接呼叫b()
    d(); //正確,可直接呼叫d()
  }
  static void d(){
    new Test().b(); //正確,可直接呼叫b()
  }
}

JAVA筆記-Object類別提供的方法

##ShowAll##任何物件包含自定義物件,都繼承Object類別
Object提供的方法:
clone()
equals()
finalize()
hashCode()
notify()
notifyAll()
toString()
wait()

JAVA筆記-物件導向的兩個精神與三個特徵

##ShowAll##

精神
1.抽象化(Abstraction)
2.繼承(Inheritance)

特徵
1.繼承(Inheritance)
2.封裝(Encapsulation)
3.多型(Polymorphism)

2009年10月5日 星期一

JAVA筆記-宣告類別、屬性、方法的權限

##ShowAll##
修飾元用來宣告類別、屬性、方法的權限

private => 同一class才可存取
dafault => 同一package的class才可存取
protected => 同一package的class才可存取,
                   不同package要有繼承關係才可存取
public => 皆可存取

類別只能使用public和default,若是內部類別則皆可使用
/