自己水平菜,找書看得到如下二則:
c++
類函式處理經驗二則
一、類裡面的函式指標
類中的函式指標,所對應的不是函式,而是乙個變數,
c++標準一直沒有對此發表具體的標準。
#include
#include
using
namespace std;
void
fun()
class
dd */
~dd() {}
};
dd::dd()
intmain(int argc, char *argv)
二、函式的名字隱藏
名字隱藏主要是發生在區域性的名字隱藏了外部的名字,一般的變數很容易理解,但是類裡面的函式重寫和過載的出現就有點麻煩了,特別是基類和派生類的關係。
有一點遵循,就是一旦派生類出現了和基類同名的函式,不管是過載和重寫,注意重寫和過載不是一回事,到底是怎麼一回事,
,基類的函式都將被隱藏,加不加
virtual
並不影響這種格局,還有過載要合法: 1
、基類的所有函式都被重寫,而且出現過載:
class
fun1;
class
sub_fun1 : public fun1
void print(string); //
全部重寫基類的
print函式
void print(long );
void g(long);
//全部重寫基類的g函式
void g(double);
void print(fun1);
//過載
void g(fun1);
//過載g
private:
};
這種情況,基類的同名函式都被遮蔽,過載的函式也照常工作。 2
、僅僅全部重寫基類某一類同名函式的時候,如:
class
fun1;
class
sub_fun1 : public fun1
void print(string);
void print(long ); //g
函式得到繼承
private:
};
派生類的重寫的函式將遮蔽基類的同名函式如
,但是沒有重寫的函式將繼承,如
g函式。 3
、對一類函式的部分重寫,不管出現或者不出現過載,沒有被重寫的函式將被遮蔽。 4
、對基類的函式沒有重寫,但是在派生類中出現了同名函式的過載,那麼基類的同名函式將被全部遮蔽。 5
、如果既不重寫也不過載,那麼基類所有的函式都將被繼承。
總結,呼叫乙個被遮蔽的函式,得到的就是乙個編譯期錯誤!
最後看乙個例項:
//funtion.h
#include
#include
using
namespace std;
class
fun1
private:
string str;
};
class
sub_fun1 : public fun1
void print(string);
//這裡重寫的
string
引數的print
函式,遮蔽了
float
和long
引數的print
函式, //對
g函式沒有重寫也沒有過載
//void print(float );
//void print(long );
private:
};
///functon.cpp
#include
"funtion.h"
fun1::fun1()
fun1::fun1(std::string a_string)
void
fun1::print(string a_int)
void
fun1::print(long a_fun1_long)
/*
void sub_fun1::print(long a_long)
void sub_fun1::print(float a_float)
*/
void
sub_fun1::print(std::string a)
///main.cpp
#include
"funtion.h"
intmain()
C 類函式經驗二則
自己水平菜,找書看得到如下二則 c 類函式處理經驗二則 一 類裡面的函式指標 類中的函式指標,所對應的不是函式,而是乙個變數,c 標準一直沒有對此發表具體的標準。include include using namespace std void fun class dd dd dd dd intmai...
HPILO管理經驗二則
第一則 如何重啟ilo hp ilo可以遠端管理伺服器,非常方便,但是hp ilo在web管理介面,沒有重啟的選項,如果需要重啟ilo,可以使用以下方法 一 伺服器物理斷電再加電,需要現場操作 二 通過ssh方式重啟ilo 1 通過ssh工具連線 2 敲命令 cd map1 3 執行重啟命令 三 通...
WEB 除錯二則
1 有天在頁面上寫了乙個提交頁面的script函式,結果死活不能提交頁面,鬱悶了很久,第二天偶爾和同事看的時候,發現原來有個按鈕的名字叫做submit 和form.submit 重複 於是就不停的提示說,沒有相應的屬性。鬱悶啊鬱悶,低階錯誤!2 中文提交的老問題 發現在url中的中文無法正常提交,頁...