①函数如果有返回值,就必须在所有可能返回的点上将值返回
<练习>
2.1
#include <iostream>
using namespace std;
bool fibon_elem(int, int &);
int main(void)
{
int pos;
cout << "Please enter a position:(-1 to quit)";
cin >> pos;
while(pos > 0)
{
int elem;
if(fibon_elem(pos, elem))
cout << "ellement # " << pos
<< " is " << elem << endl;
else
cout << "Sorry. Coutld not calculate element # "
<< pos << endl;
cout << "Please enter a position:(-1 to quit)";
cin >> pos;
}
return 0;
}
bool fibon_elem(int pos, int & elem)
{
if(pos > 1024)
{
elem = 0;
return false;
}
elem = 1;
int n_2 = 1, n_1 = 1;
for(int i = 3; i <= pos; i++)
{
elem = n_2 + n_1;
n_2 = n_1;
n_1 = elem;
}
return true;
}
②pi = new int(123)可将pi对象初值设置为123,释放对象的空间需要delete,释放对象的数组需要delete[],并且释放并不需要检查对象是否为NULL
③将函数定义成inline,只是对编译器的一种要求,是否执行则视编译器而定
④只是返回值类型不同不足以将函数重载
<练习>
2.2
#include <iostream>
#include <vector>
using namespace std;
void Show(vector<int> &);
bool Pentagonal(int, vector<int> &);
int main(void)
{
int num;
vector<int> vec;
cout << "请输入需要多少个元素:";
cin >> num;
if(Pentagonal(num, vec))
Show(vec);
else
cout << "您所输入的值太大" << endl;
return 0;
}
bool Pentagonal(int num, vector<int> & vec)
{
if(num <= 0 || num > 1024)
return false;
for(int i = 1; i <= num; i++)
vec.push_back(i * (3 * i - 1) / 2);
return true;
}
void Show(vector<int> & vec)
{
for(int i = 0; i < vec.size(); i++)
cout << vec[i] << ',';
cout << endl;
}
2.3
#include <iostream>
#include <vector>
using namespace std;
inline bool Text(int num)
{
if(num <= 0 || num > 1024)
return false;
return true;
}
void Enter(int, vector<int> &);
void Show(vector<int> &);
bool Pentagonal(int, vector<int> &);
int main(void)
{
int num;
vector<int> vec;
cout << "请输入需要多少个元素:";
cin >> num;
if(Pentagonal(num, vec))33
Show(vec);
else
cout << "您所输入的值太大" << endl;
return 0;
}
bool Pentagonal(int num, vector<int> & vec)
{
if(Text(num))
{
Enter(num, vec);
return true;
}
return false;
}
void Show(vector<int> & vec)
{
for(int i = 0; i < vec.size(); i++)
cout << vec[i] << ',';
cout << endl;
}
void Enter(int num, vector<int> & vec)
{
for(int i = 1; i <= num; i++)
vec.push_back(i * (3 * i - 1) / 2);
}
2.4
#include <iostream>
#include <vector>
using namespace std;
int index(const vector<int> &, int);
const vector<int> * Pentagonal(int);
int main(void)
{
const vector<int> * vec = Pentagonal(0);
cout << "请输入要返回的索引:";
int dex;
cin >> dex;
cout << index(*vec, dex) << endl;
return 0;
}
int index(const vector<int> & vec, int num)
{
if(num > vec.size())
Pentagonal(num);
return vec[num - 1];
}
const vector<int> * Pentagonal(int num)
{
static vector<int> vec;
vec.clear();
for(int i = 1; i <= num; i++)
vec.push_back(i * (3 * i - 1) / 2);
return &vec;
}
2.5
//小多 懒得写
#include <iostream>
#include <vector>
int & max(int, int);
float & max(float, float);
string & max(string, string);
vector & max(vector<int>);
vector & max(vector<float>);
vector & max(vector<string>);
int * max(int [], int);
float * max(float [], int);
string * max(string [], int);
using namespace std;
int main(void)
{
return 0;
}
2.6
#include <iostream>
#include <vector>
template<typename T>
T max(T, T);
template<typename T>
vector<T> max(vector<T>);
using namespace std;
int main(void)
{
return 0;
}