C++Pirmer 类的成员函数和重载

来源:互联网 发布:青岛邮箱数据 编辑:程序博客网 时间:2024/05/17 07:51

1.定义成员函数的函数体:类的成员函数必须在类定义中声明,可以在类外定义。在类内定义的成员函数默认为内联函数。类的成员函数可以访问该类的private成员。类的定义应该放在type.h头文件中,类的成员函数的定义应该放在名为type.cc的文件中,后者必须包含前者。

class Sales_item{public:  double avg_price() const;  bool same_isbn(const Sales_item &rhs) const  { return isbn == rhs.isbn;}  Sales_item(): units_sold(0),revenue(0.0) {}private:  std::string isbn;  unsigned units_sold;  double revenue;};

2.成员函数的调用:在编译器中存在隐含的形参。

total.same_isbn(trans);Sales_item::same_isbn(&total, trans);

this指针的引入:实际上成员函数是这样的。this是指向const对象的指针,该成员函数不能修改调用他的对象,称为常量成员函数。函数被声明为常量成员函数,那么形参表后要加const。

bool Sales_item::same_isbn(const Sales_item *const this, const Sales_item &rhs) const{return (this->isbn == rhs.isbn);}


3.在函数体外定义类成员函数时,要指明他们是类的成员。

double Sales_item::avg_price() const{  if(units_sold) return revenue/units_sold;  else return 0;}


4.构造函数:  Sales_item(): units_sold(0),revenue(0.0) {}

形参表和函数体均为空,默认构造函数不需要形参,这时类的成员初始化为0,isbn默认隐式的初始化为空串。


5.重载函数:出现在相同作用域中的两个函数,具有相同的名字,而形参不同,则称为重载函数。重载函数和重复声明是不同的。

局部声明函数会屏蔽外部的重载函数。

void print(double);void foobar(int ival){  void print(int);  print(3.14);}

6.函数匹配:将函数调用和重载函数集合中的一个函数相关联的过程。

候选函数:找到在调用点上声明可见的与被调函数同名的函数。

可行函数:函数的形参个数相同,实参类型必须和形参类型匹配或可隐式转换。

最佳匹配:不能存在二义性,否则需要强制类型转换。最佳匹配分等级:精确匹配,通过类型提升匹配,通过标准转换匹配,通过类类型转换匹配。


7.重载和const对象:仅当形参是引用或指针时,形参是否为const才有影响。

Record lookup(Phone);Record lookup(const Phone);//重复声明Record lookup(Acount&);Record lookup(const Acount&);//重载




0 0