一、实参与形参区别
函数调用时,主调函数把实参的值传给被调函数的形参,实现数据传递。
有以下特点:
1.形参变量只有被调用时才分配内存,调用结束后释放
2.实参可以是常量、变量、表达式、函数等
3.函数调用时数据单向传递,只能实参传给形参并不发生变化
二、静态局部对象
static局部对象一旦被创建,在程序结束前不会被撤销。在被多次调用时会保持原有值,如下例子
size_t count_calls()
{
static size_t ctr = 0;
return ++ ctr;
}
int main()
{
for(size_t i = 0; i != 10; ++i)
count << count_calls() << endl;
return 0;
}
这个程序依次输出1 ~ 10 的整数
三、构造函数的定义
和其他成员函数一样,构造函数也必须有类中声明,但是可以在类中或类外定义。如下在类中定义:
class Sales_item{
public:
double avg_price() const;
bool same_isbn(const Sales_item &rhs)const
{
return isbn == rhs.isbn;
}
type Sales_item():units_sold(0),revenue(0.0){}
private:
std::string isbn;
unsigned units_sold;
double revenue;
}
冒号和冒号与定义(空)函数体的花括号之间的代码。初始化列表表明units_sold和revenue成员都就初始化为0.每当创建Sales_item对象时,它的这两个成员都以初值0出现
四、重载函数
出现在相同作用域中的两个函数,如果具有相同的名字而形参不同,则称为重载函数
五、指向函数的指针
将ff声明为一个函数,它带有一个int型的形参。
int (*) (int *, int);
简化该定义
typedef int (*PF)(int*, int);
PF ff(int);
int Fun1(FnType ft, int x, int y)
{
return (*ft)(x, y);
}
int Fun2(int (*fn)(int , int), int x, int y)
{
return (*fn)(x, y);
}
int main()
{
count << Fun1(&Sum, 2, 3)<< ""; //输出5
count << Fun2(&Sum ,3, 4)<< "\n"; //输出7
return 0;
}