c++ primer学习笔记(9)-函数(3)
2011-02-25 19:16 Clingingboy 阅读(370) 评论(0) 编辑 收藏 举报
一.类成员函数
分为声明(接口)和定义(实现),必须在类定义中
如下示例
class Sales_item {
public:
// operations on Sales_item objects
double avg_price() const;
bool same_isbn(const Sales_item &rhs) const
{ return isbn == rhs.isbn; }
// private members as before
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
avg_price为声明未定义,same_isbn是声明和定义
在类外部定义成员函数
double Sales_item::avg_price() const
{
if (units_sold)
return revenue/units_sold;
else
return 0;
}
二.构造函数
1.合成的默认构造函数
如果没有为一个类显式定义任何构造函数,编译器将自动为这个类生成默认构造函数。
2.自定义构造函数
// default constructor needed to initialize members of built-in type
Sales_item(): units_sold(0), revenue(0.0) { }
注意:构造函数的初始化列表,这个比较特殊,构造函数也有执行顺序,先执行初始化列表再执行内部代码
三.重载函数
在类中,构造函数和其他函数都可以重载(名字相同而形参表不同),如下
Record lookup(const Account&); // find by Account
Record lookup(const Phone&); // find by Phone
Record lookup(const Name&); // find by Name
Record r1, r2;
r1 = lookup(acct); // call version that takes an Account
r2 = lookup(phone); // call version that takes a Phone
重载可视作设计问题,也可以借助别名的函数,视情况而定
四.const修饰成员函数
const修饰类的成员函数,则该成员函数不能修改类中任何非const成员函数。一般写在函数的最后来修饰。
class A
{
…
void function()const; //常成员函数, 它不改变对象的成员变量. 也不能调用类中任何非const成员函数。
}