编程的起点

来源:互联网 发布:mac内置音频剪辑 编辑:程序博客网 时间:2024/06/14 15:26

   今天,刚加入一个群,原本以为自己c++水平还不错的我,遇到了一个群里的提问,却只能愣在一边,这个问题如下:

       #include<iostream>

#include<string>

using namespace std;

 

template<typename T>

void swap(T&a,T&b){     

T temp=a;a=b;b=temp;

}

 

int main(){

double dx=3.5,dy=5.6;

int ix=6,iy=7,ia=303,ib=505;

string s1="good",s2="better";

 

cout<<"double dx="<<dx<<",      dy="<<dy<<"/n";

cout<<"int    ix="<<ix<<",      iy="<<iy<<"/n";

cout<<"string s1=/""<<s1<<"/",  s2="<<s2<<"/n";

 

swap(dx,dy);

swap(ix,iy);

swap(s1,s2);

swap(ia,ib);

 

cout<<"/nafter swap:/n";

cout<<"double dx="<<dx<<",      dy="<<dy<<"/n";

cout<<"int    ix="<<ix<<",      iy="<<iy<<"/n";

cout<<"string s1=/""<<s1<<"/", s2=/""<<s2<<"/"/n";

 

return 0;

}

 

这里首先是风格的问题,都说可读性太差,模块话不强,可是我开始觉得自己以前也是这么写的,也许真的自己的代码量还是太少了,所以感觉太差了。以后会更加努力的。

第二,也是首要的程序问题,意识到本身模板函数没问题,可就是不知问题出在哪了.

很是郁闷。后来经过点拨,才意识到,本程序的swap和string(string.h里string类的swap函数)头文件里的函数重名了,所以swap函数出现二义性,一般是将自己的函数名改一下,就可以通过了。

这么简单的问题,自己就没检查出来,实在汗啊!以后要加强编码啊!

改后的代码如下:

 

 

#include<iostream>

#include<string>

using namespace std;

 

 

int main(){

double dx=3.5,dy=5.6;

int ix=6,iy=7,ia=303,ib=505;

string s1="good";

string s2="better";

 

cout<<"double dx=" <<   dx << ",      dy=" << dy << "/n";

cout<<"int    ix=" <<   ix << ",      iy=" << iy << "/n";

cout<<"string s1=/""<<  s1<< "/",  s2="    << s2 << "/n";

 

MySwap(dx,dy);

MySwap(ix,iy);

MySwap(s1,s2);

MySwap(ia,ib);

 

cout<<"/nafter swap:/n";

cout<<"double dx=" <<   dx << ",      dy=" << dy << "/n";

cout<<"int    ix=" <<   ix << ",      iy=" << iy << "/n";

cout<<"string s1=/""<<  s1<< "/",  s2="    << s2 << "/n";

 

return 0;

}

 

template<typename T>

void MySwap(T &left, T &right){     

T temp = left;

left  = right;

right = temp;

}

自己感觉这样的风格真的很不错的呀。

 

原创粉丝点击