关于引用和指针的区别以及模板使用的练习
2014-02-20 21:08
387 查看
//以下为引用变量为形参的函数和指针变量为形参的函数 #ifndef TEST_PA_H #define TEST_PA_H #include<stdio.h> #include<QObject> #include<iostream> using namespace std; //模板开头必须有template参数 无论是类还是函数 template<typename M> class Test_Pa { //由于linux中模板类的实现必须在同一个类的头函数里,所以将test_pa_dis的程序复制过来 public: Test_Pa(M a, M b) { this->a = a; this->b = b; pa = &a; pb = &b; } //pt函数为指针为形参的函数,作用是交换指针pta和ptb值,若无&则不能实现功能,因为没有&就只是对pa和pb的副本进行操作,对他们本身无影响 void pt(M *&pta , M *&ptb) { M *ptc; ptc = pta;pta = ptb;ptb = ptc; } //ref函数说明了引用的作用,引用实质上就是变量的别名,所以此处形参实际上就是实参的别名,所以对形参操作就是对实参操作 void ref(M &ra, M &rb) { M rc; rc = ra; ra = rb; rb = rc; } void dis_zhizhen() { pt(pa,pb); cout <<"zhizhen :*pa = "<<*pa<<",*pb = "<<*pb<<endl; cout <<"zhizhen :a = "<<a<<",b = "<<b<<endl; } void dis_yinyong() { ref(a,b); cout <<"yinyong :a = "<<a<<",b = "<<b<<endl; } protected: M a; M b; M *pa; M *pb; }; #endif // TEST_PA_H //main函数实现 #include "mainwindow.h" #include <iostream> #include <QApplication> #include "test_pa_dis.h" using namespace std; int main(int argc, char *argv[]) { Test_Pa<float> test_pa(3.9,4.9); test_pa.dis_zhizhen(); test_pa.dis_yinyong(); return 0; }
最后显示结果为:
zhizhen :*pa =4.9,*pa = 3.9//指针交换成功
zhizhen :a = 3.9, b = 4.9//a和b并没有进行交换
yinyong :a = 4.9, b = 3.9//因为对a和b进行操作,所以a和b交换成功 .
相关文章推荐
- C++值传递、引用传递、指针传递以及STL模板堆的使用
- 对象和对象指针以及对象引用的使用
- 引用&,引用的使用,常引用,引用与多态,引用与指针的区别
- Android开发,关于依赖库和JAR包的区别以及使用多个依赖库可能出现的问题(SlidingMenu、SwipeBackLib)
- ios 关于UIAlertView与UIActionSheet的区别,以及在使用过程中注意事项
- 关于MSSQL的decimal(numeric)、money、float的使用以及区别
- 使用指针与不使用指针的区别以及int (*compare)(int a,int b)的用法
- 引用的定义、使用及其和指针的区别与联系
- C和C++中struct的区别 以及C++中struct和class 以及c和c++区别 引用和指针
- C C++中关于值传递和引用传递,指针传递之间的区别
- 智能指针强弱引用以及enable_shared_from_this使用
- 关于PHP模板Smarty的初级使用方法以及心得分享
- c++引用与指针的区别以及它们适用的情形
- 引用的定义、使用及其和指针的区别与联系
- 关于建树以及建单链表时要使用二重指针的原因
- 关于A标签使用onclick事件的疑问,若是href="#",跳转无反应,以及href=#与href=javascript:void(0)的区别
- 关于C++使用指针 堆和栈的区别分析
- (转载)何时使用引用以及何时引用指针
- c++ 指针与引用的区别介绍及使用说明
- 2010.8.16 关于函数参数是指针、还是引用的区别