怎样用全局函数调用类的成员函数
#include"stdafx.h"#include<iostream>usingnamespacestd;classA{private:voidfun1();publi...
#include"stdafx.h"
#include<iostream>
using namespace std;
class A
{
private:
void fun1();
public:
void fun2();
};
void A::fun1()
{cout<<"fun1"<<endl;}
void A::fun2()
{cout<<"fun2"<<endl;}
void main()
{
void face();
A a;
face();
}
void face()
{
a.fun1();//????????
a.fun2();//????????调用这两个类成员函数的时候出问题了,请问要怎么调用?
} 展开
#include<iostream>
using namespace std;
class A
{
private:
void fun1();
public:
void fun2();
};
void A::fun1()
{cout<<"fun1"<<endl;}
void A::fun2()
{cout<<"fun2"<<endl;}
void main()
{
void face();
A a;
face();
}
void face()
{
a.fun1();//????????
a.fun2();//????????调用这两个类成员函数的时候出问题了,请问要怎么调用?
} 展开
3个回答
展开全部
因为你在main函数中定义的变量a,而face函数看不到这个a变量,你可以考虑将a的地址传送该face来用:
class A
{
private:
void fun1();
public:
void fun2();
void callfun1();
};
void A::fun1() {cout<<"fun1"<<endl;}
void A::fun2() {cout<<"fun2"<<endl;}void main()
void A::callfun1() { fun1(); }
{ void face(A *p);
A a;
face(&a);
}
void face(A *p)
{ //p->fun1(); fun1是一个私有函数是不允许A外的程序直接调用的,只有A类内的程序可以调用
//比如在fun2中调用它,外部程序可通过public函数间接调用私有函数
p->callfun1();
p->fun2();
}
class A
{
private:
void fun1();
public:
void fun2();
void callfun1();
};
void A::fun1() {cout<<"fun1"<<endl;}
void A::fun2() {cout<<"fun2"<<endl;}void main()
void A::callfun1() { fun1(); }
{ void face(A *p);
A a;
face(&a);
}
void face(A *p)
{ //p->fun1(); fun1是一个私有函数是不允许A外的程序直接调用的,只有A类内的程序可以调用
//比如在fun2中调用它,外部程序可通过public函数间接调用私有函数
p->callfun1();
p->fun2();
}
展开全部
这个程序有两个问题:
1、void face()中a是无定义的(not declared),更不能调用类A中的成员函数;
2、成员函数fun1()是私有的,在类外不能访问,fun2()是公有的在类外可以访问。
有两个方案供参考:
1、访问类有私有函数需要公有接口,所以可通过fun2()访问fun1();如fun2(){fun1();/*...*/;}
2、如果非要在main函数外另外调用一个函数face()来访问类A,face()就要带有关类A的参数,如:void face( A &b);
3、可以在main函数中直接访问类A,不必经过中间的函数。
下面就是两个通过编译的代码:
//方案1:fun2.cpp
#include<iostream>
using namespace std;
class A
{
private:
void fun1();
public:
void fun2();
};
void A::fun1()
{cout<<"fun1"<<endl;}
void A::fun2()
{cout<<"fun2"<<endl;fun1();}//有改动有地方
int main()
{
void face( A &b);//有改动加了参数
A a;
face(a);
}
void face(A &b)//有改动加了参数
{
//b.fun1();//这行无用
b.fun2();/通过参数b调用成员函数fun2()
,请问要怎么调用?
}
//方案2_fun2.cpp
#include<iostream>
using namespace std;
class A
{
private:
void fun1();
public:
void fun2();
};
void A::fun1()
{cout<<"fun1"<<endl;}
void A::fun2()
{cout<<"fun2"<<endl;fun1();}//有改动
int main()
{
A a;
//a.fun1();
a.fun2();
}
仅供参考。
1、void face()中a是无定义的(not declared),更不能调用类A中的成员函数;
2、成员函数fun1()是私有的,在类外不能访问,fun2()是公有的在类外可以访问。
有两个方案供参考:
1、访问类有私有函数需要公有接口,所以可通过fun2()访问fun1();如fun2(){fun1();/*...*/;}
2、如果非要在main函数外另外调用一个函数face()来访问类A,face()就要带有关类A的参数,如:void face( A &b);
3、可以在main函数中直接访问类A,不必经过中间的函数。
下面就是两个通过编译的代码:
//方案1:fun2.cpp
#include<iostream>
using namespace std;
class A
{
private:
void fun1();
public:
void fun2();
};
void A::fun1()
{cout<<"fun1"<<endl;}
void A::fun2()
{cout<<"fun2"<<endl;fun1();}//有改动有地方
int main()
{
void face( A &b);//有改动加了参数
A a;
face(a);
}
void face(A &b)//有改动加了参数
{
//b.fun1();//这行无用
b.fun2();/通过参数b调用成员函数fun2()
,请问要怎么调用?
}
//方案2_fun2.cpp
#include<iostream>
using namespace std;
class A
{
private:
void fun1();
public:
void fun2();
};
void A::fun1()
{cout<<"fun1"<<endl;}
void A::fun2()
{cout<<"fun2"<<endl;fun1();}//有改动
int main()
{
A a;
//a.fun1();
a.fun2();
}
仅供参考。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
例子:
void test1()
{cout<<"i am outer test1";}
class A{
void test1()
{cout<<"i am inner test1";]
void test2()
{test1();}
void test3()
{::test1();}
};
void main()
{A a;
a.test2(); //输出i am inner test1
a.test3(); //输出i am outer test1
}
void test1()
{cout<<"i am outer test1";}
class A{
void test1()
{cout<<"i am inner test1";]
void test2()
{test1();}
void test3()
{::test1();}
};
void main()
{A a;
a.test2(); //输出i am inner test1
a.test3(); //输出i am outer test1
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询