クラスのメンバ変数として関数ポインターを用意してそこにそのクラスの関数のポインターを入れたりクラスの外の関数のポインターを設定する方法が知りたいです。void(*scp)();// にsample::cfを設定する方法が知りたいのですが教えてくれますでしょうか?
C++
1#include <iostream> 2#include "conio.h" 3#include <math.h> 4using namespace std; 5 6 7 8 9void f() 10{ 11 printf("関数ポインター"); 12} 13 14int add(int a, int b) 15{ 16 return a + b; 17} 18 19class sample 20{ 21public: 22 23 int cx; 24 void cf() 25 { 26 printf("関数ポインター"); 27 } 28 29 int c_add(int a, int b) 30 { 31 return a + b; 32 } 33 34 void(*scp)();// 35}; 36 37int main() 38{ 39 sample sa,sa2; 40 sample *sp = new sample(); 41 42 void(*fp)() = f; 43 int(*fp2)(int a, int b) = add; 44 //(*fp)(); 45 int x = (*fp2)(2,3); 46 //printf("%d",x); 47 48 void (sample::*cfp)() = &sample::cf; 49 //(sa.*cfp)(); 50 //(sa2.*cfp)(); 51 //(sp->*cfp)(); 52 53 int sample::*cp; 54 cp = &sample::cx; 55 56 57 58 59 60 _getch(); 61 return 0; 62} 63
前の質問でも言いましたが、VC固有の関数等(scanf_s(),_getch())使わないでほしいです。LinuxのC(gcc,clang)ではコンパイルできません。
わかりました。
ちなみに、2回めのscanf()ちゃんと動きますか?
僕のWindows10 visual studio でエラーになりscanf_sを使ってくださいってなるのでそうしてたんですけど指摘があったので編集しました。
scanf()自体は仕様を把握していないと使い方が難しい関数です。まぁ、数値の入力は問題ないのですが文字列を入力する時は問題が発生する可能性があります。VCのエラーは"_CRT_SECURE_NO_WARNINGS"を設定すれば出なくなります。
で、本題ですが「結局何がしたいのでしょう?」 ソースを見ても何が作りたいのか分かりません。勉強のためということならいいのですが・・・
usingとtypdefの仕様の違いが知りたいです。
出典を忘れましたが、ほぼ同じ機能と思って差し支えないかと思います。
参考:https://cpprefjp.github.io/lang/cpp11/alias_templates.html
Linuxを使っているとaliasは身近なものなのでv^^;
特に何か作ってるわけではないのですが忘れたので動作を確認しています
戻り値があり仮引数のある関数ポインターを返す関数の書き方が知りたいのですが
using やtypdefを使わずそのまま書く方法を教えてくれますか?
追記しました。
・・・できれば自分で解決してほしかった。
>理解に困っています
理解が出来ない・・・は、頭がついていってない証拠です、まず理解しましょう。
C++の言語仕様確かめましたか?
コンパイルして動かしてみれば?
どのような言語でもコンパイルして動かせば異常がわかります。
デバッグ70%ですよd^^
手前味噌ですが「10日間でプログラムを作ろうと思ったら。」
https://xcateye.blogspot.com/2019/03/blog-post.html
質問変わってませんか?
回答している人が分の獲たい回答と違うのでタイトルと文章を編集しました。
回答5件
あなたの回答
tips
プレビュー