🗜函数部分

函数重载

定义多个函数,编译器根据实参类型确认该调用哪个

只重载那些确实非常相似的函数

补充:显示类型转换 cast-name(expression) cast-name有四种,下面分开讨论重要的2种

static_cast:对非常量(不包含底层const)进行明确定义的类型转换 eg:double res = static_cast(j)/i; //int j=2; int i =1 结果为0.5,因为我们显示强制转换,所以结果为double且编译器不会警告;不类型转换结果为0

  1. const_cast: 把底层const 修改为变量 —— 获得对该(前)常量修改其他值&类型的**权限**

eg: const char pc; char p = const_cast(pc)

重载和const

image.png

这代码真美啊。。

默认实参

image.png

🎆类

image.png

  1. class Sales_data {
  2. friend Sales_data add(const Sales_data&, const Sales_data&);
  3. friend std::ostream &print(std::ostream&, const Sales_data&);
  4. friend std::istream &read(std::istream&, Sales_data&);
  5. public:
  6. // constructors
  7. Sales_data(): units_sold(0), revenue(0.0) { }
  8. Sales_data(const std::string &s):
  9. bookNo(s), units_sold(0), revenue(0.0) { }
  10. Sales_data(const std::string &s, unsigned n, double p):
  11. bookNo(s), units_sold(n), revenue(p*n) { }
  12. Sales_data(std::istream &);
  13. // operations on Sales_data objects
  14. std::string isbn() const { return bookNo; }
  15. Sales_data& combine(const Sales_data&);
  16. double avg_price() const;
  17. private:
  18. std::string bookNo;
  19. unsigned units_sold;
  20. double revenue;
  21. };

几点补充: 假如初始化了 const sale_data xx; 所有域都不能修改。

成员函数

可以定义在类内(特殊)、也可以定义在类外
通过this 隐式参数来调用对象的成员函数

访问器

std::string isbs() const {return bookNo;}
其中,string是返回类型;
类外只定义了返回值;

const成员函数

假如 Sale_data test; test.isbn(); 编译器把test的地址传递给isbn的隐式参数 this

其中,this 是 常量指针 (地址值 指针 本身是const,但被指的对象不是) 因为没规定被指对象,所以指向非常量类型
假如需要正确的引入常量,就要搭建const成员函数,具体方法是在声明末位加 const。
**
在本例中,因为所有 书籍参数 并不想显式展示,所以把sales对象设置为const更好

构造函数

初始化类对象的数据成员
image.png
构造函数初始值列表
c++为构造函数提供了类内赋值方式——冒号+setter, 见 2 3行
而类外并不需要额外操作,所以null

image.png 这里会出现2个错误 image.png 第一个是因为 bookno在私有域; 第二个因为 const不能修改,对应可用操作符没有 =“赋值” 所以对常量对象+私有域不无意义,一个只能私有访问,一个是“无法修改”

第四行是拷贝类