通過using 關鍵字重新聲明基類成員的訪問控制屬性
能從子類賦值向基類,反之則不行,即使是指針或者引用也不行。
基類中定義的static成員,共享於基類和子類。
貼一段檢查身份證號碼的C代碼,絕對原創,至於算法,那是copy別處的,呵呵。
bool CheckID(string ID) {
const int auxiliary_array[] = {
7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1
};
const int length_of_id = 18;
if (ID.size() != length_of_id) {
return false;
} else {
const short offset_char = 48;
int sum = 0;
for (int i=0; i<length_of_id-1; ++i) {
char c = ID[i];
int auxiliary = static_cast<int>(c) - 48;
sum += auxiliary*auxiliary_array[i];
}
int jym = sum % 11;
char cJYM = '/0';
switch (jym)
{
case 0:
cJYM = '1';
break;
case 1:
cJYM = '0';
break;
case 2:
cJYM = 'x';
break;
case 3:
cJYM = '9';
break;
case 4:
cJYM = '8';
break;
case 5:
cJYM = '7';
break;
case 6:
cJYM = '6';
break;
case 7:
cJYM = '5';
break;
case 8:
cJYM = '4';
break;
case 9:
cJYM = '3';
break;
case 10:
cJYM = '2';
break;
}
return ID[length_of_id-1] == cJYM;
}
return false;
}
×××××××××××××××××××××××××××××××××
×××××××××××××××××××××××××××××××××
類內地名稱覆蓋,
子類會覆蓋基類的同名函數,不存在函數重載的問題,只要名稱相同,就覆蓋。
子類可以使用以下方式訪問被覆蓋的函數:
derived.base::function();
同理,局部作用域的名稱也會覆蓋全局的名稱:
string init(); // the name init has global scope
void fcn() { int init = 0; // init is local and hides global init
string s = init(); // error: global init is hidden
}
×××××××××××××××××××××××××××××××××
×××××××××××××××××××××××××××××××××