語法差別

 不喜勿噴------java


  1. 定義靜態方法c++

1.c++:安全

頭文件 static FileUtils* getInstance();函數

cpp文件 FileUtils* FileUtils::getInstance() { return s_sharedFileUtils; }lua

2.javaspa

java文件 public static FileUtils getInstance() {return s_sharedFileUtils;}code

3.luaorm

lua 沒有靜態方法這一說法。函數也是一個值。對象

tb.print和tb:print的含義略微不一樣,:調用函數會多傳遞進去一個self進去,差很少至關於OOP裏面的成員函數調用.可是和OOP裏面成員函數/非成員函數不一樣的是,lua裏面的非成員函數.調用,他不是靜態的.tb對象有一個print function成員,當tb是nil的時候,你不能調用print成員的...在OOP裏面,沒有這麼一回事,非成員函數是全局的.繼承

定義表 tb = {} 定義函數 function tb.print() print("") end

4.object-c

頭文件 + (FileUtils*) getInstance;

.m文件 + (FileUtils*) getInstance { return instance; }



2.宏定義

1.c++:

頭文件 #define CC_PLATFORM_IOS 1

2.java

java沒有這個說法,能夠用final static int代替,但要在某個class或者interface裏面;

public interface Constants { public final static int CC_PLATFORM_IOS = 1; }

3.lua

lua 沒有這個說法,用全局變量代替 CC_PLATFORM_IOS 1

4.object-c

頭文件 #define CC_PLATFORM_IOS 1


3. 全局方法

1.c++:(與c相似)

頭文件 void f1();

cpp文件 void f1() { cout << "f1" << endl; }

當使用的地方也有f1方法時,編譯會報重定義錯誤;

2.java

java沒有這個說法,都必須放到class中,便是類靜態方法;

java文件 public class C1 { public static void f1() { Log.d("TAG","f1"); } }

3.lua:第一類值,主要對table的操做

lua文件 function f1() print('f1') end

當使用的地方也有f1方法時,前者會被後者覆蓋;

4.object-c:object-c包含c,因此用c實現

頭文件 void f1();

.m文件 void f1() { NSLog(@"f1"); }

當使用的地方也有f1方法時,編譯會報重定義錯誤;


3. 模板

java模板沒看到支持 T add(T a, T b)方法的。有 boolean add(T object)方法;即模板主要是用在容器上面;

1.c++:(與c相似),模板定義與實現最好不要分開,否則常常說找不到定義,因此通常都一塊兒定義在.h,.hpp文件中。

.h 或者 .hpp 文件

類模板

template<class T> class A{
public:
    A();
    T add(T a, T b) {
        return a + b;
    }
};

    函數模板

template<class T>
T myAdd(T a, T b) {
    return a + b;
}

2.java

接口模板

public interface List<E> extends Collection<E> {
    public boolean add(E object);
}

類模板

public class Observable<T> { }

3.lua:

4.object-c:

C++裏的模板是用來取代C裏面的宏的

c模板:宏定義,沒有類型檢查,c++有,但也不是安全的

#define C_Add(a, b)  a + b

object-c模板:Objective-C 不支持模板;java的接口(interface)和oc的協議(protocol)相似於c++模板方法模式,用繼承去實現.

相關文章
相關標籤/搜索