代码改变世界

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成员函数。

}