C++ Primer Note

类(class)


  • 类的基本思想是抽象(data abstraction)与封装 (encapsulation)
  • 类的定义:
    • 成员函数(Member function) 必须在类内部声明(declare),而在类内部定义(define)的函数为隐式内联(inline),在类外部定义用范围操作符::。
    • this指针在生成对象时隐式生成且绑定对象地址,不可改变(type *const this)。
    • const成员函数
    //return const_type
    type get_value() const {return value;}
    //this显示表达
    type get_value(const type *const this){return this->value;}
    • 返回this对象的函数的类型为reference,而引用结果为左值,且返回的是对象本身,而非拷贝对象。
    object_type &combine()
    {
        /*****/
        return *this; //使用this返回对象
    }
    • IO类型不能被复制,只能引用传输。
    istream &read(istream &is){return is;}
    • 构造函数(construct) 用于初始化类成员,在对象被创造时被调用。
      • 默认构造函数只在没有定义构造函数时调用;不能够初始化类内部的没有默认构造函数的类成员。
      Object() = default; //定义默认构造函数
      Object(const_type m1,const_type m2) : m1(m1), m2(m2){ } //初始化类成员
      //类成员的初始化顺序只与类成员的声明顺序相同。
      //所以尽量保持声明与定义的顺序相同。
      Object():Object(m1,m2){ }	//Delegating construct
      
      • 类成员的类型为const, reference的必须初始化。
      • Copy, Assignment, and Destruction,一些需要动态内存分配的类可以使用vector或者string处理内存。
      • 委托构造函数(Delegating Construct) 使用其他的构造函数实现初始化。
      • explicit 阻止使用该构造函数。
      explicit Object(const type& s):S(s){};
      Object obj=s;	//error
      Object obj(s);  //ok
  • 类的访问控制与封装:
    • 友元(Friends) 可以访问类内非public成员,它在类内部声明。
    class Object{
        friend type fact(); //函数fact可以调用Object的非public成员;
        friend class_type men; //对象men可以。。。
        friend type class_type::fun();//类型class_type的函数fun可以。。。
    };
  • 增加类的特征:
    • 类型成员(Type Member) 需要定义在类的首部
    public:
    typedf std::string::size_type pos;
    using pos = std::string::size_type; //或者
    • 可以在定义函数时用inline 显式内联成员函数。
    • Overloading Member Functions
      • const重载函数可以使函数灵活的选择调用。
      Object &display();
      const Object &display();
      obj.display.set('*');	//调用第一个函数
      obj.display()//调用第二个函数
      • 对相同的函数部分可以定义为小型函数避免重复编写。
    • mutable数据成员 永远不为const。
  • 类的域(Class Scope):
    • 在类外部已定义的类型名称不能在类内部再次定义。
    typedef double Money;
    class Object
    {
        typedef double Money;   //error,
        ...
    }
  • 综合类(Aggregate Class) 的所有成员都是public,没有构造函数及类内初始化,赋值要注意顺序。
struct Person
{
    string name;
    unsigned age;
}
Person p = {'Mike',3};
  • 静态类成员(Static Class MeMber)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值