C++基础回顾一

类的易忘特性:

近期,翻看基础的《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_mgrScreen类的友元类,故可以访问 Screen类的私有成员height 和width
}

4.建议:使用构造函数初始化值
1.如果成员是const或者引用的话,就必须将其初始化。
2.初始化和赋值的区别在于:初始化是直接初始化数据成员,赋值则先初始化再赋值。

5.字面值常量类
constexpr函数的返回值和参数都是字面量。

猜你喜欢

转载自blog.csdn.net/ty13438189519/article/details/80232070