#############
## 类#############友元(friend)、可变成员(mutable)、静态成员(static)构造函数:(冒号后面为初始化列表,用来初始化数据成员)Fun():x(5),y(10){}成员函数:必须在类内部声明,但是不必在内部定义。如果在内部定义,则默认为inline。外部定义:必须用域操作符'::'指定所属类名。例如:ClassName::fun1(){}struct: 如果类用该关键字定义,则默认成员是公有的。class :默认成员是私有的。类的访问符:public 、private、protected。 访问符出现的次数、位置都没有限制;访问符限制其后定义的成员的访问级别。public:可以由程序的所有部分访问。private:只能本类内部访问。protected:本类已经后代类访问。关键字 typedef: std::string::size_type index typedef 给一个类型设置别名重载操作符: 1、两个重载成员的形参数量和类型不能完全相同。 2、类的成员函数只能重载类的其他成员函数,不能重载非成员函数和其他类中声明的函数。inline:类内部成员函数默认inline,也可以显示的指定inline三种方式定义内联函数:1、在类内部定义函数。2、在类内部的函数声明上用inline显示指定。3、在类外部的函数定义上用inline显示指定。类定义:一个类只能被定义一次,如果在多个文件中定义一个类,则每个文件中的定义必须相同。头文件保护符:header guard,保证即使头文件在同一文件中被包含多次,类定义也只出现一次。前向声明(forward declaraton):class Screen。Screen为类类型,它在声明后,定义前这个状态,是一个不完全的类型(incompete type)。不完全类型(incompete type): 1、不能定义该类型的对象。 2、用于定义指向该类型的指针已经引用 3、用于声明(而非定义) 使用改类型作为形参类型或返回类型的 函数。类不可以具有自身类型的数据成员,但可以有指向自身类型的指针和引用。######################类对象####################1、定义类型时并不进行内存分配,当我们定义对象时会分配内存2、类类型的使用: a、将类的名字直接用作类型名。 b、关键字class|struct + 类的名字。3、类定义后可以接一个对象列表,必须以分号结束。4、this指针:成员函数具有附加的隐含形参,即指向该类对象的一个指针-this5、可变数据成员(mutable data member):永远不能为const ,即使他是const对象的成员。mutable数据成员可以被const成员函数修改6、常成员函数:const放在参数列表后面修饰成员函数表示常成员函数 特性:const 成员函数不能修改它所在对象的数据成员。(mutable 除外) const 成员函数只能访问const 成员函数,成员函数只能访问成员函数。7、成员访问操作符:‘.' '->' 。前者是对象访问成员,后者是对象指针访问成员8、‘::'类作用域限定符,可以用于在类外定义成员函数。9、在类作用域外定义的成员函数,需要使用完全限定名即:ClassName::fun 函数的返回值因为在函数名前,也需要使用完全限定名。 形参列表和函数体在函数名后,则不需要使用。10、名字查找优先级:先后为所在函数体、所在类、所在文件#######################构造函数#####################1、构造函数初始化列表:以冒号开始,以逗号分割,每个数据成员后面用括号包含初始化式2、初始化const或者引用数据成员的唯一机会是在构造函数初始化列表。3、默认构造函数:只有没有定义构造函数时系统才会自动生成默认构造函数4、没有定义构造函数并且全体数据成员均为public的类,可以采用与初始化数组元素乡土的方式初始化其成员(按照声明的顺序)。例如: ClassName obj = {0,0};##################友元################友元机制(friend):允许一个类将对自身非公有成员的访问权限授予指定的函数或类。特性:只能出现在类定义内部(任何地方),不受声明出现部分的访问控制影响。例如: class Screen { friend class Window_Mgr; } Window_Mgr 对象可以访问Screen的私有成员。如果Screen想访问Window_Mgr 的私有成员 则需要在Window_Mgr 中设置 friend class Screen; 友元可以是非成员函数、其他类的成员函数、或者整个类。################# static###############1、数据成员: static 数据成员是与类关联的,独立于该类的任何对象。 非static 数据成员与对象关联,存在该类的每个对象中。2、成员函数: static成员函数:没有this形参,可以直接访问所属类的static成员,不能直接使用非static成员。3、static成员的定义:在声明前添加static关键字。static成员遵循访问规则。4、static成员的使用: a:通过作用域操作符直接调用,Account::rate(); b: 通过对象调用:Account act;act.rate(); c: 通过指针调用:Account* p = &act; p->rate();5、外部定义static成员,无须重复指定static保留字,改保留字只出现在类定义体内部的声明处。6、static函数没有this指针,也不能被指明为const,也不能被声明为虚函数。7、static 数据成员必须在类定义体外部定义(static const 除外)。 static 数据成员不通过构造函数初始化 例如:int ClassName::data = initData();//类定义体外、main函数外