Case1: implicit type conversion in normal function |
#include <iostream> /* string Constructor void foo(string s) int main() |
上面的例子中,我們在main裡面宣告依個char s[],再把此array的pointer s傳到
void foo(string s),但是問題來了,因為foo的參數式string s,但是main傳入的是char * s,型態不同怎可以傳遞呢?
這是因為main的char * s在傳給foo的string s會呼叫其建構子
string ( const char * s );
因此char * s當作參數傳給string的建構子,初始化此物件後就成為foo的 string s。
Case2: implicit type conversion in constructor |
#include <iostream> class ClassName int main() |
同樣的情況,在作物件本身的assignment(=)時也會出現同樣的情況。
1.
a = b;
左邊的type為ClassName,右邊的type為ClassName,所以沒問題。a裡的所有變數都會成跟b一樣,也就是a的x等於2。
2.
a = n;
左邊的type為ClassName,右邊的type為int,這是時候系統就會使用Implicit type conversion in constructor。3會傳到建構子ClassName(3),所以a裡的x等於3。
3.
n = a;
左邊的type為int,右邊的type為ClassName。由於int沒有其他constructor可以轉換其他物件。所以右邊的ClassName造成int不知道怎麼處理。
沒有留言:
張貼留言