zoukankan      html  css  js  c++  java
  • c++ -- 类类型

    类类型

    类的声明:

    class A;

    类声明之后定义之前是一个不完全类型,也就是说,此时A是一个类类型,但是不清楚它到底包含哪些成员。

    不完全类型只能在非常有限的情景下使用:可以定义指向这种类型的指针和或引用,也可以声明(但不是定义)以不完全类型作为参数或者返回类型的函数。

    类的成员:

    因为只有当类全部完成后类才算被定义,所以一个类的成员类型不能是它自己,然而,一旦一个类的名字出现后,它就被认为是声明过了(但未定义),因此类允许包含指向自身类型的引用或指针

    1.函数成员

    构造函数:一种特殊的成员函数,不能声明为const 的

    常量指针this:this类型为“A *const”,总是指向调用成员函数的“这个”对象;

    const成员函数:用于修改隐式this指针的类型,修改后this指针类型为“const A *const”。相当于为this指针增加了“底层const”,能够引起重载;

    返回this对象的函数:

    /*注意返回类型和返回语句*/
    Sales_data & Sales_data::combine(const Sales_data &rhs)
    {
        ...
        return *this;     //解引用this指针   
    }

    const能够引起重载

    未完。。。

    2.数据成员

    通常封装为在"private"部分,private部分封装(即隐藏)了类的实现细节。

    可变数据成员(mutable关键字):对于可变数据成员,任何成员函数,包括const函数在内都能改变它的值。

    class Screen
    {
    public:
        void some_member() const;   //const成员函数
    private:
        mutable size_t access;          //可变数据成员
    }
    
    void Screen::some_member() const
    {
        ++access;                  //改变access
    }

    类内初始值:我们提供一个类内初始值时,必须使用“=”或者花括号表示。

    3.类型成员

    class Screen
    {
    public:
        typedef std::string::size_type pos;  //类型成员pos
    private:
        pos cursor=0;
        pos height=0;
        std::string contents;

    类可以自定义某种类型在类中的别名,由类定义的类型别名和其他成员一样存在访问限制(public或者private);

    用来定义类型的成员必须先定义后使用,一般出现在类开始的地方

    4.友元

    友元声明与类本身放在同一个头文件

    为了使友元对类的用户可见,在类外再专门对友元函数进行一次声明(除了类内部的友元声明之外);调用友元的成员函数应在外部友元声明之后实现

    可访问类的private成员,并且可改写类的private数据成员。滥用友元会破坏类的封装性;

    类之间的友元:如果类指定了友元类,则友元类的成员函数可以访问此类包括非公有成员在内的所有成员;

    class Screen
    {
        friend class Window_mgr;      //友元类,不需要在Window_mgr定义之后
        ...
    }    
    class Window_mgr
    {
    public:
      /*在Screen定义之后使用Screen*/
    using ScreenIndex=vector<Screen>::size_type; //类型成员ScreenIndex void clear(ScreenIndex); private: vector<Screen> screens{Screen(2,80,' ')}; }; void Window_mgr::clear(ScreenIndex i) { Screen &s=screens[i]; /*能够访问Screen的私有成员:contents,heights,width*/ s.contents=string(s.heights*s.width,' '); }

    令成员函数作为友元:作为友元的成员函数应定义在最后

  • 相关阅读:
    在Dictionary使用foreach的注意
    [公告]新增项目交流区
    博客园Blog程序中又一个奇怪问题
    公告
    网络爬客光顾博客园
    爬网的影响
    致歉
    [业界新闻]中文IT百科Beta版于2006年7月10日正式上线
    公告
    疯狂的爬网
  • 原文地址:https://www.cnblogs.com/cygalaxy/p/6995428.html
Copyright © 2011-2022 走看看