PDA

View Full Version : سوال : کار با پوینتر به تابع



shaaadi
پنج شنبه 06 اسفند 1388, 11:17 صبح
من نمیدونم پوینتر به یک تابع را چه جوری از تو structure صدا کنم ؟
مثلا یک structure داریم و میخایم با اون یک تابع را صدا کنیم چه جوری باید بنویسم برای صدا کردنش ؟


struct product
{
void* (*A)(void*);
}
و تابع ای که صدا میکنم اینطوری هست :


int b(int,int)یعنی باید cast بشه ... که اونم نمیدونم چه طوری هست ؟

simul8or
پنج شنبه 06 اسفند 1388, 11:53 صبح
struct همان طور که از نامش پیداست، یک ساختار برای تعریف متغییر،اشاره گر،شئ و اعلان توابع است، نه مقدار دهی و یا فراخوانی(به غیر موارد استاتیک). اگر منظور شما اعلان است، کد زیر نحوه اعلان توابع و تعریف آن را نشان می دهد:
(compiled with visual studio 2008, no problem)


#include <iostream>
#include <cstdlib>

using namespace std ;

////////////////////
//code by simul8or//
////////////////////

void OutSum(int x,int y)
{
cout<<x+y<<" :OutSum do it"<<endl;
}

struct simul8or{
int x;//not used!
float y;//not used!
void InSum(int,int);
void (*funcPtr)(int,int);
}sim;

int main ()
{

sim.InSum(5,6);
sim.funcPtr=&OutSum;
sim.funcPtr(4,3);

system("pause");
return 0 ;
}

void simul8or::InSum(int x, int y)
{
cout<<x+y<<" :InSum do it"<<endl;
}

shaaadi
پنج شنبه 06 اسفند 1388, 12:30 عصر
مرسی ... منظورم دقیقا همینی بود که شما گفتی ! اینجا دیگه نمیشه از -> استفاده کرد ؟

simul8or
پنج شنبه 06 اسفند 1388, 12:50 عصر
مرسی ... منظورم دقیقا همینی بود که شما گفتی ! اینجا دیگه نمیشه از -> استفاده کرد ؟
دوست عزیز عملگر -> زمانی استفاده می شود که شما یک اشاره گر به شئ داشته باشید،مثلا در کد زیر از -> استفاده شده. اینها مباحث ساده C++‎ هستند، مطمئنا با اندکی مطالعه با راحتی می توانید مشکلات خود را حل کنید.


#include <iostream>
#include <cstdlib>

using namespace std ;

////////////////////
//code by simul8or//
////////////////////

void OutSum(int x,int y)
{
cout<<x+y<<" :OutSum do it"<<endl;
}

struct simul8or{
int x;//not used!
float y;//not used!
void InSum(int,int);
void (*funcPtr)(int,int);
}*sim=new simul8or;

int main ()
{

sim->InSum(5,6);
sim->funcPtr=&OutSum;
sim->funcPtr(4,3);


delete sim;
system("pause");
return 0 ;
}

void simul8or::InSum(int x, int y)
{
cout<<x+y<<" :InSum do it"<<endl;
}