概述
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
void q1();
void print(char * a, int b = 0);
const int Len = 40;
struct CandyBar
{
char maker[Len];
double weight;
int calo;
};
void q2();
void setnum(CandyBar & a, char * m = "Millennium Munch", double w = 2.85, int c = 350);
void show(const CandyBar & a);
void q3();
void Upper(string & a);
struct stringy{
char * str;
int ct;
};
void q4();
void set(stringy & a, char * b);
void show(const stringy & a, int i = 1);
void show(const char a[], int i = 1);
void q5();
template<typename T>
T max5(const T a[]);
void q6();
template<typename T>
T maxn(const T a[], int n);
typedef char * charptr;
/*
若写为
template<>
char * maxn(const char * a[], int n);
会报错:template-id 'maxn<>' for 'char* maxn(const char**, int' does not match any template declaration
在模板的定义中, const T 所代表的是一个常量。那么 const char* 是一个常量吗?
不是,它是一个非常量指针(编译器允许改变它的值,让它指向别处),指向一个常量(编译器不允许修改它所指向的内容)。
所以,编译器判定显式特化与函数模板定义不匹配。
正确的写法是:
typedef char* char_ptr;
template<> char_ptr max_e (const char_ptr ar[], int n)
或者写为
template<> char* max_e(char* const arr[],int len)
注意只有char* const 才能对应原来的模板中的const T
而不是const char* 对应 const T !
*/
template<>
charptr maxn(const charptr a[], int n);
void q7();
template <typename T>
T SumArray(T arr[], int n);
template <typename T>
T SumArray(T * arr[], int n);
struct debts
{
char name[50];
double amount;
};
int main()
{
q7();
return 0;
}
void q1()
{
char a[50] = "Hello";
cout << "print(a):" << endl;
print(a);
cout << "print(a,2):" << endl;
print(a, 2);
}
void print(char * a, int b)
{
if (b)
{
while(b--)
print(a, b);
}
else
cout << a << endl;
}
void q2()
{
CandyBar num1, num2;
setnum(num1, "xy", 1.2, 230);
setnum(num2);
show(num1);
show(num2);
}
void setnum(CandyBar & a, char * m, double w, int c)
{
int i = 0;
for (; strlen(m) < (Len - 1) && i < strlen(m); i++)
a.maker[i] = m[i];
a.maker[i] = '