C++之类之类的其它特性

 

 一、在类中定义类型别名:

除了在类中定义数据和函数成员以外,类还可以自定义某种类型在类中的别名。类型别名也需要用访问说明符修饰。

  如下所示:

1 class Screen{
2 public:
3    //使用类型别名
4    typedef std::string::size_type pos;       
5    //也可以使用别名声明
6   using pos = std::string::size_type;
7 };

 定义类型的成员必须先定义才能使用,这与普通成员有所区别(原因后面再填坑),所以类型成员通常出现在类开始的地方。

 在类内使用类型别名有什么好处呢? Screen的用户不知道Screen使用了什么类型来存储它的数据,所以通过把pos定义成public成员来隐藏Screen实现的细节。


 二、将成员设置为inline函数

  定义在类内部的函数自动成为inline的(注意是定义!!!)。我们最好在类的外部用inline说明符修饰函数,使它成为内联的。不过也可以在类的内部把inline作为声明的一部分显式的声明成员函数(不推荐)


三、可变数据成员(mutable data member)

  有时我们希望修改类的某个数据成员,可以在变量声明前加入mutable关键字。一个可变数据成员永远不可能是const的,即使它是在一个consts对象内。因此一个const成员函数可以修改一个mutable成员的值。任何成员函数包括const函数在内的所有函数都可以修改它的值。

  可变数据成员的作用是什么呢? 比如你让给一个const成员函数传入(const class object)此时你就不能更改class object的值,但是你恰巧需要一个变量是变动的,此时最能满足你的就是mutable data member。

class Screen{
public:  
   void some_member() const;
private:
    mutable size_t access_ctr;  //即使在一个const对象内也能够被修改
 
};

void Screen::some_member() const
{
   ++access_ctr; 
}

四、类数据成员的初始值:

  当我们初始化类类型的成员时,需要为构造函数传递一符合成员类型的实参。最好的方式就是把这个默认值声明成一个类内初始值。

如下所示:

1 class Window_mgr{
2 private:
3    std::vector<Screen> screens{Screen(24,80,'  ')}; 
4 
5 };

猜你喜欢

转载自www.cnblogs.com/ccpang/p/11375036.html
今日推荐