1 命名空間
#include <iostream.h>
//using namespace std;
namespace name1
{
int max(int a,int b)
{
int result= a>b? a:b;
return result;
}
}
namespace name2
{
int max(int a,int b)
{
int result= a>b? a:b;
cout<<"the max is "<<result<<endl;
return result;
}
}
using namespace name1;
using namespace name2;
int main()
{
cout<<name2::max(10,20)<<endl;
return 0;
}
注意點:
1、main函數前可以不加
using namespace name1;
using namespace name2;
那麼,使用name1或name2下的函數(或類)時,就必須在函數前 加 作用域
2、頭文件一樣不能省
但一般使用using namespace name1這樣的語句來聲明 函數、類的原型
2 函數模板
代碼:
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
template <class T>
T max(T a,T b)
{
T result= a>b? a:b;
return result;
}
/*
float max(float a,float b)
{
float result= a>b? a:b;
return result;
}
char max(char a,char b)
{
char result= a>b? a:b;
return result;
}*/
int main()
{
//cout<<max('d','c')<<endl;
cout<<max(100,167)<<endl;
return 0;
}
知識點:
1、函數參數,如果是 字符串-------實際上是 char *
2、strcmp
字符串的比較函數------C語言
比較的是 2個字符串的 ASCII
靠返回值來判斷誰大 誰小
a-b
3、比較漢字的大小
實際上比較的是漢字的 GBK編碼 大小
但該編碼順序,剛好和 新華字典 順序一致--------根據拼音
4、如果調用某個函數時,發現,既有 函數模板,也有 普通函數------------普通函數 優先級高,首先調用
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
template <class T>
T max(T a,T b) //這是函數模板,優先級低,因此當調用max("李四","張三")時,實際調用的是不是該函數模板
{ //在mian中調用max('d','e')時,沒有普通函數,因此該函數模板被實際調用
T result= a>b? a:b;
return result;
}
char * max(char * a,char * b) //這是普通函數,優先級高,因此當調用max("李四","張三")時,實際調用的是本函數
{
char * result;
int flag=strcmp(a,b);
if(flag>=0)
{
result=a;
}
else
{
result=b;
}
return result;
}
/*
float max(float a,float b)
{
float result= a>b? a:b;
return result;
}
char max(char a,char b)
{
char result= a>b? a:b;
return result;
}*/
int main()
{
//cout<<max('d','e')<<endl;
cout<<max("李四","張三")<<endl; //GBK GB2312
return 0;
}
類模板
例子:將CStudent類,改造爲1個 類模板
改造步驟:
1、將普通類的 int 改爲 T
2、在 類聲明前加 template <class T>
3、在 成員函數定義前加 template <class T>
4、在 成員函數定義中:作用域後加 <T>
5、在main函數中,定義CStudent類的對象時,在類名後加 <int>-------當number爲int時
在類名後加 <char *>----當number爲char *時(即,學號可以爲字符串,如"First"、"Second")
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
template <class T>
class CStudent
{
public:
T number;
char *name;
CStudent(T number,char *name);
};
template <class T>
CStudent<T>::CStudent(T number,char *name)
{
this->number=number;
this->name=new char[strlen(name)+1];
strcpy(this->name,name);
}
int main()
{
CStudent<int> stu1(1001,"zhangsan");
CStudent<char *> stu2("first","lisi");
cout<<stu2.number<<" "<<stu1.name<<endl;
return 0;
}
3 string
優點:
1、可代替 char *
2、像數組,裏面也有元素,且元素類型爲 char
3、是 動態數組----即,數組元素可以任意添加和刪除,而數組大小會動態進行增大或減小
4、可以直接進行賦值運算,而且是 深複製,不需要使用new和strcpy進行賦值了
5、可以直接使用cin cout
6、使用+可以進行字符串的連接
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str1="zhangsan";
//char *str1="zhangsan";
//char str1[]="zhangsan";
cout<<str1<<endl;
cout<<"請輸入1個字符串:";
cin>>str1;
cout<<"您輸入的是:"<<str1<<endl;
return 0;
}
例子:---------在CStudent類中,使用string來代替char *
//Student.h
#include <string>
using namespace std;
class CStudent
{
public:
int number;
string name;
CStudent();
CStudent(int number,string name);
void print_student();
virtual ~CStudent();
};
//Student.cpp
CStudent::CStudent(int number,string name)
{
this->number=number;
this->name=name;
}
void CStudent::print_student()
{
cout<<number<<" "<<name<<endl;
return;
}
//main.cpp
#include <iostream>
#include <string>
#include "Student.h"
using namespace std;
int main()
{
CStudent stu1(1001,"zhangsan");
stu1.name=stu1.name+" hello";
stu1.print_student();
return 0;
}
C++ STL之命名空間、函數模板、類模板
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.