C ++クラスの研究ノート第九関数のオーバーロードと関数ポインタ

研究ノートの内容から:Ditaiソフトウェア・カレッジTangzuo林先生のビデオ、私はあなたの指導に感謝します

関数のオーバーロード関数ポインタは会いました:

関数ポインタに割り当てられた多重定義関数の名前場合:
1.関数ポインタ引数リスト候補と一致するルールオーバーロードの選択
正確候補関数ポインタと一致する関数タイプと機能タイプ2、即ち、関数の戻り値のタイプでもあります試合へ

例えば:

int func(int a)
{
  return a;
}

int func(int a,int b)
{
  return a+b;
}

void func(int a)
{
  std::cout<<a<<std::endl;
}

typedef int(*PFUNC)(int a)

PFUNC P = FUNCを呼び出すとき、マッチが最初の関数であるとき、

注:
1.過負荷機能は同じスコープ内で発生しなければならない
関数の戻り値の型パラメータリストや機能を選択する2.コンパイラのニーズを
3オーバーロードされた関数は、関数名によって直接得ることができないエントリアドレスを
正しいアプローチです。

printf(%p\n”,int(*)(int)func);
printf(%p\n”,int(*)(int,int)func);
printf(%p\n”,void(*)(int)func);

C ++とCは、お互いを呼び出します

互いを呼び出す1.実用的なエンジニアリングC ++やCコードは避けられ
2.C ++ C言語と互換性のある方法コンパイルするコンパイラ
3.C ++コンパイラは、C ++コンパイラの方法を使用することを好むであろう
だけCに(4.externキーワード++ )C ++コンパイラCコンパイラモードを強制することができます

extern “C”
{
  //code...
}

たとえば、次のように
add.hファイルで:

int add(int a,int b);

add.cファイルで:

int add(int a,int b)
{
  return a+b;
}

我々はmain.cppにのように、ファイルにadd.h C ++のヘッダファイルを参照したいとき以上の2つのファイルが、C言語であります

#include <stdio.h>

extern “C”
{
  #include “add.h”
}

int main()
{
  int c = add(1,2);
  printf(“c = %d\n”,c);

  return 0;
}

だから、それはコンパイルすることを、そうでない場合、コンパイラはその指摘追加機能がadd.c代わりadd.cppに定義されているため、定義されていない機能を

Cコンパイラに特定のCコードを確保するために、どのようにそれをコンパイル?
A:_cplusplus C ++コンパイラ、マクロ標準マクロでは、すべてのC ++コンパイラはこの機能を利用する、持っている、あなたがこれを行うことができます:

#ifdef _cplusplus
extern “C”
{
#endif
//C code...

#ifdef _cplusplus
}
#endif

注意事項

1.C ++コンパイラがオーバーロードし、C関数をコンパイルすることはできません
関数名をコンパイルすることを決めた。2.コンパイルターゲットの名前である
オブジェクト名にコンパイル3.C ++コンパイラモードの関数名とパラメータリスト
関数名をコンパイルする4.C唯一の方法ターゲット名としてコンパイル

公開された14元の記事 ウォンの賞賛0 ビュー101

おすすめ

転載: blog.csdn.net/u012321968/article/details/104450169