C++ 학습 노트 22, 일반 함수 리 셋 (1)

5371 단어 C++다 형
전재 출처 를 밝 혀 주 십시오:http://blog.csdn.net/qq844352155/article/details/31353325 이 박문 은 교류 학습 에 만 사용 되 므 로 그 어떠한 상업 적 용도 에 도 사용 하지 마 십시오. 본 블 로 거들 은 이 박문 에 대한 모든 권 리 를 보류 합 니 다.블 로그:http://blog.csdn.net/qq844352155
무 거 운 짐 을 싣 는 방법 은 무엇 입 니까?
방법 과부하 도 함수 과부하, 함수 의 다 형 성 이 라 고 할 수 있다.
구체 적 으로 말 하면 함수 나 방법의 이름 을 여러 함수 에 사용 하 는 것 이지 만 매개 변수의 유형 이나 매개 변수의 수량 이 다르다.
이 블 로그 에서 나 는 클래스 외 함수 의 재 업로드 만 토론 한다.
예 를 들 어 간단 한 예:
#include <iostream>
#include <string>
using namespace std;

void printf(int i){
	cout<<"This is an int:"<<i<<endl;
}
void printf(const string s){
	cout<<"This is a string:"<<s<<endl;
}
int main(){
	int a=10;
	string s="my name is jack!";
	printf(a);
	printf(s);
	system("pause");
}
이 cpp 에는 같은 이름 의 printf 함수 가 두 개 있 지만 이들 의 매개 변수 유형 이 다 릅 니 다. 이것 은 가장 간단 한 함수 재 업로드 의 예 입 니 다.
전달 하 는 매개 변수 가 다 를 때 대응 하 는 함 수 를 호출 합 니 다.
C++学习笔记22,普通函数重载(1)_第1张图片
그러나 주의해 야 할 것 은 컴 파일 러 가 자동 으로 전환 되 는 경우 도 있다 는 점 이다.
#include <iostream>
#include <string>
using namespace std;

void printf(const char i){
	cout<<"This is an char:"<<i<<endl;
}
void printf(const string s){
	cout<<"This is a string:"<<s<<endl;
}
int main(){
	int a=11;
	string s="my name is jack!";
	printf(a);
	printf(s);
	printf(67);
	system("pause");
}
운행 결과:
C++学习笔记22,普通函数重载(1)_第2张图片 int 가 자동 으로 char 형식 으로 전환 되 는 것 을 볼 수 있 습 니 다.
자동 변환 을 원 하지 않 는 다 면 C++ 11 에서 지정 한 리 셋 함 수 를 삭제 하 는 방법 을 지원 합 니 다.
#include <iostream>  
#include <string>  
using namespace std;  
  
void printf(int i){  
    cout<<"This is an int:"<<i<<endl;  
}  
void printf(const string s){  
    cout<<"This is a string:"<<s<<endl;  
}  
void printf(char c)=delete;
int main(){  
    int a=10;  
    string s="my name is jack!";  
	char ch='a';
    printf(a);  
    printf(s); 
	 printf(ch); 
   
	return 0;
}  

C++学习笔记22,普通函数重载(1)_第3张图片
이렇게 하면 자동 전환 을 막 을 수 있다.
주의해 야 할 것 은 인자 가 달라 보 이 는 함수 들 이 공존 할 수 없다 는 것 이다.예컨대
void printf(const string s){
	cout<<"This is a const string:"<<s<<endl;
}
void printf(string s){
	cout<<"This is a string:"<<s<<endl;
}
및:
void printf(string &s){
	cout<<"This is a const string:"<<s<<endl;
}
void printf(string s){
	cout<<"This is a string:"<<s<<endl;
}

컴 파 일 러 의 각도 에서 printf (s) 보기;컴 파 일 러 는 네가 도대체 어떤 함 수 를 호출 하려 고 하 는 지 전혀 모른다.이런 상황 에서 컴 파일 러 는 잘못 이 라 고 생각 할 것 이다.
하지만 인용 인 자 를 다시 불 러 오 는 것 은 조금 다르다.예컨대
</pre><pre name="code" class="cpp">#include <iostream>
#include <string>
using namespace std;
void printf(const string &s){
	cout<<"This is a const string:"<<s<<endl;
}
void printf(string &s){
	cout<<"This is a string:"<<s<<endl;
}

int main(){
	string s="my name is jack!";
	printf(s);
	const string cs="hello world!";
	printf(cs);
	system("pause");
}

실행 결과:
C++学习笔记22,普通函数重载(1)_第4张图片 컴 파 일 러 는 가장 일치 하 는 함 수 를 자동 으로 호출 합 니 다.
이것 이 바로 일반적인 함수 과부하, 클래스 밖의 상황 입 니 다.
사실 이것 은 템 플 릿 함 수 를 통 해 대체 할 수 있 고 더욱 효율 적 이다.
#include <iostream>
#include <string>
using namespace std;
template<class T>
void printf(T t){
	cout<<"I don't know what it is!but I can show it -->"<<t<<endl;
}

int main(){
	int a=10;
	string s="my name is jack!";
	printf(a);
	printf(s);
	system("pause");
}

C++学习笔记22,普通函数重载(1)_第5张图片

좋은 웹페이지 즐겨찾기