C++與C的語法區別1
阿新 • • 發佈:2019-01-07
CPP cin
強弱型別//#include<stdlib.h>//C風格 #include<cstdlib> #include<iostream> using namespace std; void main1() { //char str[20] = { "tasklist & pause" };//C風格 char str[20]{ "tasklist&pause" };//CPP風格 system(str); cin >> str;//輸入 system(str); } void main() { int num; double db; char ch; cin >> num >> db >> ch; cout << num << db << ch << endl;//結束並換行 //cin cout泛型 system("pause"); }
#include<iostream>
void main()
{
int num = 100;
int *p1 = #
//char *p2 = p1;//無法從int轉換為char
//CPP型別檢測嚴格,精準 強型別程式語言
//int *p2 = p1;//C語言風格
int *p2(p1);//CPP寫法 ()代表初始化
}
using
函式的過載和模板函式#include<iostream> namespace run1 { int x = 10; } namespace run2 { int x = 20; } void run() { using namespace std;//等同於區域性變數 cout << "hello"; using namespace run1; using namespace run2; //cout << x;//不明確 } void main() { std::cout << "hello" << std::endl; //std::cout << run2::x << std::endl;//或者下面的寫法 using run2::x;//只因用名稱空間的一個變數或函式 std::cout << x << std::endl; std::cin.get(); }
#include<iostream> #include<cstdlib> using namespace std; //add CPP函式過載 //int add(int a, int b) //{ // return a + b; //} //char add(char a, char b) //{ // return a + b; //} //double add(double a, double b) //{ // return a + b; //} //函式模板的意義 通用,泛型 呼叫的時候編譯,不呼叫不編譯 template<class T>//模板函式,原生函式優先於模板函式,強行呼叫模板add<int>(1,2)制定型別 T add(T a, T b) { return a + b; } void main1() { cout << add(1,2) << endl;//3 cout << add('1', '2') << endl;//c system("pause"); }
模板介面
#include<iostream>
using namespace std;
void show(int num)
{
cout << num << endl;
}
void show1(int num)
{
cout << num +1 << endl;
}
void show2(double num)
{
cout << num + 1 << endl;
}
template<class T>//把show函式也變成模板
void showit(T num)
{
cout << num << endl;
}
//泛型介面,任何資料型別,傳遞函式指標
template<class T,class F>
void run(T t, F f)
{
f(t);
}
void main()
{
run(10, show);//10
run(10, show1);//11
run(10.1, show2);//11.1
run("abc", showit<const char*>);//showit模板函式
//介面,嚴格型別
cin.get();
}
型別一致可變引數模板
#include<iostream>
#include<cstdarg>//包含可變引數
using namespace std;
template<class T>
T add(int n, T t...)//第一個代表多少個引數,第二個,多個型別
{
cout << typeid(T).name() << endl;
va_list arg_ptr;//開頭的指標
va_start(arg_ptr, n);//從arg_ptr開始讀取n個數
T res(0);//初始化為0
for (int i = 0; i < n; i++)
{
res += va_arg(arg_ptr, T);//根據資料型別取出資料
}
va_end(arg_ptr);//結束讀取
return res;
}
void main()
{
cout << add(4, 1, 2, 3, 4) << endl;
cout << add(5, 1, 2, 3, 4, 5) << endl;
cout << add(5, 1.1, 2.2, 3.3, 4.4, 5) << endl;
cin.get();
}
型別不一致可變引數模板
#include<iostream>
#include<cstdarg>//包含可變引數
using namespace std;
void show()//用來結束遞迴
{
}
//引數型別不一致,個數不確定 typename class 都代表型別
template<typename T,typename...Args>//typename...Arge可變引數
void show(T t, Args...args)//Args...args C++巨集定義,可變引數的型別
{
cout << t << endl;
show(args...);//遞迴
}
void main1()
{
show(1, 1.2, 'a', "123");
cin.get();
}