类的易忘特性:
近期,翻看基础的《C++ Primer》,温故而知新,希望自己养成好习惯,在某一领域深耕耘,路漫漫而修远,吾将上下而求索。
1.类的内联成员函数:在类中常有一些规模较小的函数适合于被声明成内联函数,定义在类内部的成员函数是自动inline的。
2.可变数据成员-mutable
可变数据成员永远都不是const,即使它是const对象的成员。
class Screen {
public:
void some_member() const;
private:
mutable size_t access_ctr;
};
Screen::some_member() const
{
++access_ctr;
}
3.封装性
工作数月,对于封装性的体悟就是:封装类时,要确定其功能、哪些接口提供给外部使用,哪些接口需要隐藏。
下面是书中阐述比较好的解释:
- 确保用户代码不会无意间破坏封装对象的状态;
- 被封装的类的具体实现细节可以随时改变,而无须调整用户级别的代码。
3.友元再探
1.友元不具有传递性
2.友元类的成员函数可以访问此类的非公有成员在内的所有成员
class Screen{
friend class Window_mgr;
}
class Window_mgr{
public:
using ScreenIndex = std::vector<Screen>::size_type;
void clear(ScreenIndex);
private:
std::vector<Screen> screens{Screen(24, 80, '')};
}
void Window_mgr::clear(ScreenIndex i)
{
Screen &s = screen[i];
s.contents = string( s.height * s.width, '');//Window_mgr为Screen类的友元类,故可以访问 Screen类的私有成员height 和width
}
4.建议:使用构造函数初始化值
1.如果成员是const或者引用的话,就必须将其初始化。
2.初始化和赋值的区别在于:初始化是直接初始化数据成员,赋值则先初始化再赋值。
5.字面值常量类
constexpr函数的返回值和参数都是字面量。