🗜函数部分
函数重载
定义多个函数,编译器根据实参类型确认该调用哪个
只重载那些确实非常相似的函数
补充:显示类型转换 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
const_cast: 把底层const 修改为变量 —— 获得对该(前)常量修改其他值&类型的**权限**eg: const char pc; char p = const_cast
(pc)
重载和const

这代码真美啊。。
默认实参

🎆类

class Sales_data {friend Sales_data add(const Sales_data&, const Sales_data&);friend std::ostream &print(std::ostream&, const Sales_data&);friend std::istream &read(std::istream&, Sales_data&);public:// constructorsSales_data(): units_sold(0), revenue(0.0) { }Sales_data(const std::string &s):bookNo(s), units_sold(0), revenue(0.0) { }Sales_data(const std::string &s, unsigned n, double p):bookNo(s), units_sold(n), revenue(p*n) { }Sales_data(std::istream &);// operations on Sales_data objectsstd::string isbn() const { return bookNo; }Sales_data& combine(const Sales_data&);double avg_price() const;private:std::string bookNo;unsigned units_sold;double revenue;};
几点补充: 假如初始化了 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更好
构造函数
初始化类对象的数据成员
构造函数初始值列表
c++为构造函数提供了类内赋值方式——冒号+setter, 见 2 3行
而类外并不需要额外操作,所以null
这里会出现2个错误
第一个是因为 bookno在私有域; 第二个因为 const不能修改,对应可用操作符没有 =“赋值” 所以对常量对象+私有域不无意义,一个只能私有访问,一个是“无法修改”
第四行是拷贝类
这里会出现2个错误
第一个是因为 bookno在私有域;
第二个因为 const不能修改,对应可用操作符没有 =“赋值”
所以对常量对象+私有域不无意义,一个只能私有访问,一个是“无法修改”