不喜勿噴------java
定義靜態方法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++模板方法模式,用繼承去實現.