c++primer笔记----类

  • 成员函数
std::string isbn() const {return bookNo;}
// std::string Sales_data::isbn(const Sales_data *const this) {return this->isbn}
  • 编译器分2步处理类:编译成员声明;成员函数体。因此,成员函数随意使用数据成员,而无需在意成员出现的顺序

  • Sales_data sum = lhs:默认情况下,拷贝类的对象是拷贝对象的数据成员

  • 默认构造函数:创建类的一个const对象时,直到构造函数完成初始化过程,对象才能真正获得其常量属性

Sale_data() = default;
Sales_data(const string &s): bookNo(s) {}
  • 使用structclass定义类的唯一区别是默认的访问权限

  • 友元:可以访问类的非共有成员,是类的接口,但不是类的成员。关键字friend

class Sales_data{
friend int read();  //指定了访问权限
}
int read();   //类外声明
  • inline函数可以有多次定义,一般应该相同。所以inline成员函数定义和相应的类定义在同一个头文件中

  • 可变数据成员:mutable,即使对象是或函数是const,也能改变

  • 类对象声明

Sales_data item1;
class Sales_data item1;  //等价的
  • 友元类、友元函数等:必须仔细组织程序的结构以满足声明和定义的彼此依赖关系
friend class Window_mgr;
friend void Window_mgr::clear();
//友元一定要在外部声明(类的友元声明不算通常的声明),定义在该类之后(友元类不必)
  • 类的作用域:在类外部,一旦遇到类名,定义的剩余部分就在类的作用域之内了
void win::clear(){}
linux::type win:::clear(){}
  • 如果成员函数是const、引用或某种未提供默认构造函数的类类型,必须通过构造函数初始值列表来初始化这些值。因为构造函数体一旦开始执行,初始化就完成了。

  • 成员初始化顺序:与在类定义中出现的顺序一致

  • 使用默认构造函数:Sales_data obj;不要在后面加上()。否则,就是声明函数了

  • 转换构造函数:构造函数只接受一个实参

string null_book = "666";
item.combine(null_book);
item.combine("666");  //error :进行了2步转换 char*->string->sales_data
explict Sales_data(string &s);  //抑制了隐式转换
item.combine(static_cast<Sales_data>(cin));
  • 静态变量:static,类内声明加上static,如果在类外定义则不能加staticexplict也一样

  • 不完全类型:已经声明但是尚未定义的类型。该类型不能用于定义变量或类的成员,但是可以定义指针或引用

猜你喜欢

转载自blog.csdn.net/qq_28038207/article/details/81122715