進行C++編寫程序時,你經常需要在一個函數中調用其他函數,此時就會考慮到使用函數指針,一個函數可以調用其他函數。在設計良好的程序中,每個函數都有特定的目的,普通函數指針的使用。
首先讓我們來看下面的一個例子:
- #include <string>
- #include <vector>
- #include <iostream>
- using namespace std;
- bool IsRed( string color ) {
- return ( color == "red" );
- }
- bool IsGreen( string color ) {
- return ( color == "green" );
- }
- bool IsBlue( string color ) {
- return ( color == "blue" );
- }
- void DoSomethingAboutRed() {
- cout << "The complementary color of red is cyan!\n";
- }
- void DoSomethingAboutGreen() {
- cout << "The complementary color of green is magenta!\n";
- }
- void DoSomethingAboutBlue() {
- cout << "The complementary color of blue is yellow!\n";
- }
- void DoSomethingA( string color ) {
- for ( int i = 0; i < 5; ++i )
- {
- if ( IsRed( color ) ) {
- DoSomethingAboutRed();
- }
- else if ( IsGreen( color ) ) {
- DoSomethingAboutGreen();
- }
- else if ( IsBlue( color) ) {
- DoSomethingAboutBlue();
- }
- else return;
- }
- }
- void DoSomethingB( string color ) {
- if ( IsRed( color ) ) {
- for ( int i = 0; i < 5; ++i ) {
- DoSomethingAboutRed();
- }
- }
- else if ( IsGreen( color ) ) {
- for ( int i = 0; i < 5; ++i ) {
- DoSomethingAboutGreen();
- }
- }
- else if ( IsBlue( color) ) {
- for ( int i = 0; i < 5; ++i ) {
- DoSomethingAboutBlue();
- }
- }
- else return;
- }
- // 使用函數指針作為參數,默認參數為&IsBlue
- void DoSomethingC( void (*DoSomethingAboutColor)() = &DoSomethingAboutBlue ) {
- for ( int i = 0; i < 5; ++i )
- {
- DoSomethingAboutColor();
- }
- }
可以看到在DoSomethingA函數中,每次循環都需要判斷一次color的值,這些屬於重復判斷;在C++編寫程序中,for 循環重復寫了三次,代碼不夠精練。如果我們在這裡使用函數指針,就可以只判斷一次color的值,並且for 循環也只寫一次,DoSomethingC給出了使用函數指針作為函數參數的代碼,而DoSomethingD給出了使用string作為函數參數的代碼。