C/C++类实现值传递
2016-06-27 11:37
281 查看
C/C++类实现值传递
在这主要介绍的是类之间实现值传递。有时候我们会遇到这么一个问题:在一个A类中调用另一个B类的方法取的一些值(这个值只能在B中取得),但是这个值需要在A类中进行处理。这个时候我们就需要在类中实现值的传递。
废话不多说,下面就是实现过程:
首先,相应的头文件有:
接下来我们定义A类:testClass
在testClass类中,主要定义了两个方法:functionA和functionB,也是实现值传递的两种方式,functionA是通过在类中构造函数初始化指针取地址,然后通过定义的私有变量实现传值,functionB是通过函数直接指针传值取地址,两个方法实现原理一样,只是在这里以两种方式展示。
这里需要注意的是对string型的值传递时,直接赋值是不行的,需要通过sprintf进行赋值,否则传递过来的值为空或者乱码。
调用实现:
效果:
在这是直接在main函数里面对其方法调用实现的。在这需要注意的是:第一种方法虽然直接简单,但是如果涉及到在testClass类中多个方法对值进行处理的时候,用第二个方式更适用。
这里展示的是单线程实现,有时候我们会遇到这么一个问题:ClassA中调用另一个进程ClassB取值,但是ClassB中的值是通过回调取值,这个时候会出现ClassB中的值还没有传递过来,ClassA已经跑完了。这种情况下该怎么办呢?
后面我将介绍C/C++下的多线程实现与多线程下线程同步的实现。敬请关注!
在这主要介绍的是类之间实现值传递。有时候我们会遇到这么一个问题:在一个A类中调用另一个B类的方法取的一些值(这个值只能在B中取得),但是这个值需要在A类中进行处理。这个时候我们就需要在类中实现值的传递。
废话不多说,下面就是实现过程:
首先,相应的头文件有:
#include <iostream> #include <string> #include <stdio.h>
接下来我们定义A类:testClass
class testClass { public: testClass(int *aTo,bool *bTo); ~testClass(); int functionA(); static int functionB(char *a,int *b); private: int *test_c; bool *test_d; }; testClass::testClass(int *aTo,bool *bTo) :test_c(aTo),test_d(bTo){ } testClass::~testClass(){ } int testClass::functionA(){ int aa = 1; bool bb = true; *test_c = aa; *test_d = bb; } int testClass::functionB(char *a,int *b){ int k = 2; char s[10] = "hello"; //无法传值到aa(char类型),为空。 //a = s; //可行,头文件:stdio.h sprintf(a,s); *b = k; }
在testClass类中,主要定义了两个方法:functionA和functionB,也是实现值传递的两种方式,functionA是通过在类中构造函数初始化指针取地址,然后通过定义的私有变量实现传值,functionB是通过函数直接指针传值取地址,两个方法实现原理一样,只是在这里以两种方式展示。
这里需要注意的是对string型的值传递时,直接赋值是不行的,需要通过sprintf进行赋值,否则传递过来的值为空或者乱码。
调用实现:
using namespace std; int main(){ //值的传递方式一(直接函数调用取地址) char aa[10]; //or:char *aa; int bb; testClass::functionB(aa,&bb); cout<<aa<<endl; cout<<bb<<endl; //值得传递方式二(通过类的参数传递) int cc; bool dd; testClass *tc = new testClass(&cc,&dd); tc->functionA(); cout<<cc<<endl; cout<<dd<<endl; //如果定义了析构函数,下面一步不需要,否则会造成程序崩溃 //delete []tc; return 0; }
效果:
在这是直接在main函数里面对其方法调用实现的。在这需要注意的是:第一种方法虽然直接简单,但是如果涉及到在testClass类中多个方法对值进行处理的时候,用第二个方式更适用。
这里展示的是单线程实现,有时候我们会遇到这么一个问题:ClassA中调用另一个进程ClassB取值,但是ClassB中的值是通过回调取值,这个时候会出现ClassB中的值还没有传递过来,ClassA已经跑完了。这种情况下该怎么办呢?
后面我将介绍C/C++下的多线程实现与多线程下线程同步的实现。敬请关注!
相关文章推荐
- 封装好的Folyd建图,C++源码
- matlab与c/c++混合编程
- matlab与c/c++混合编程——c/c++调用matlab
- C/C++常用的调试宏
- VC内存泄露检查工具:VisualLeakDetector
- 内联函数总结
- usb体系结构
- VC结构体实现类似数组的下标操作符功能
- C/C++ 嵌套结构体动态内存管理实现
- C++调用gSoap编写的WEBSERVICE与C#.NET间接口自定义结构体不能重复使用
- 处理VC开发的webservice在C#.NET中中文乱码问题
- gcc使用入门
- C/C++ Linux 程序员必须了解的 10 个工具
- 递归遍历数组
- 用C/C++打印*号图案
- C++之四书五经(上)
- C++中const的使用
- *p++和*++p的区别
- C/C++输入读取数据函数总结
- 不可表示的数(庞果网)完全解答