C 類函式經驗二則

2021-04-16 01:01:08 字數 2438 閱讀 9619

自己水平菜,找書看得到如下二則:

c++

類函式處理經驗二則

一、類裡面的函式指標

類中的函式指標,所對應的不是函式,而是乙個變數,

c++標準一直沒有對此發表具體的標準。

#include

#include

using

namespace std;

void

fun()

class

dd */

~dd() {}

};

dd::dd()

intmain(int argc, char *argv)

二、函式的名字隱藏

名字隱藏主要是發生在區域性的名字隱藏了外部的名字,一般的變數很容易理解,但是類裡面的函式重寫和過載的出現就有點麻煩了,特別是基類和派生類的關係。

有一點遵循,就是一旦派生類出現了和基類同名的函式,不管是過載和重寫,注意重寫和過載不是一回事,到底是怎麼一回事,

google

,基類的函式都將被隱藏,加不加

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);

//過載

print

void g(fun1);

//過載g

private:

};

這種情況,基類的同名函式都被遮蔽,過載的函式也照常工作。 2

、僅僅全部重寫基類某一類同名函式的時候,如:

class

fun1;

class

sub_fun1 : public fun1

void print(string);

void print(long ); //g

函式得到繼承

private:

};

派生類的重寫的函式將遮蔽基類的同名函式如

print

,但是沒有重寫的函式將繼承,如

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中的中文無法正常提交,頁...