2021-10-20
碎碎念:今天力扣写的答案和官方答案相差无几,虽然是简单题但还是好爽
类
构造函数
构造函数仅为类内成员赋初值的时候,可以这么写:
struct Sales_data{
Sales_data(const string &s):bookNo(s) {} //由于只为bookNo赋了初值,units_sold和revenue都不会有值,这时若
//访问他们的值将会得到3435973836和-9.25596e+61
//这是因为c的编译器,定义变量的空间默认用CC填充
//所以未初始化的int就会变成0xCCCCCCCC
//另外,string类型的默认为空也即"\0"
Sales_data(const string &s, unsigned int n, double p):bookNo(s), units_sold(n), revenue(p*n){}
string bookNo;
unsigned int units_sold;
double revenue;
};
由于除了给类内成员赋初值以外,构造函数不干其他事,所以函数体内就为空了
所以这句话是错的
被忽略的成员并不会被初始化
class和struct
class的成员默认是private的,struct的成员默认是public的,除此之外好像并无其他区别
友元
将外部函数引为类的友元只需要在函数前加friend就行,友元函数不是类的成员,所以也不受他所在的区域访问权限的限制,但友元在类内的并非其本身的“声明”,函数本身的声明还需要在类外进行
class Sales_data{
friend Sales_data add(Sales_data a,Sales_data b);
public:
Sales_data(const string &s):bookNo(s) {}
Sales_data(const string &s, unsigned int n, double p):bookNo(s), units_sold(n), revenue(p*n){}
private:
string bookNo;
unsigned int units_sold;
double revenue;
};
friend Sales_data add(Sales_data a,Sales_data b);
string::size_type
这个东西可以理解为unsigned int,就是string内置的一种类型,当我们使用s.size()的时候,返回值的类型就是string::size_type(使用vs测试的时候,返回的是unsigned int)