类
1.类体定义了一个域,在类体中的类成员声明把这些成员名字引入到它们的类的域中。
2.成员函数的访问:成员函数被声明在它的类中,这意味着该成员函数名在类域之外是不可见的。我们 可以通过点“.” 或箭头“->” 成员访问操作符引用成员函数。
点成员访问操作符"." 与类对象或引用联用,箭头访问操作符"->" 与类对象的指针联用。
成员函数可以是重载的函数,但是一个成员函数只能重载自己类的其他成员函数。一个类的成员函数与在其他类或名字空间中声明的函数无关,因此也不能重载它们。
公有成员(public):在程序的任何地方都可以被访问。实行信息隐藏的类将其public 成员限制在成员函数上,这种函数定义了可以被一般程序用来操纵该类类型对象的操作。
私有成员(privater ): 只能被成员函数和类的友元访问,实行信息隐藏的类把其数据成员声明为private 。
被保护成员(protected ): 对派生类(derived class )就像public 成员一样,对其他程序则表现得像private 。
4.友元(friend):友元friend 机制允许一个类授权其他的函数访问它的非公有成员。友元声明以关键字friend 开头,它只能出现在类的声明中,且不受其在类体中被声明的public private 和protected 区的影响。友元函数在类外定义,类内friend说明。
友元是一种定义在类外部的普通函数,但他需要在类体内进行说明,为了和该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是他能够访问类中的私有成员。友元的作用在于提高程式的运行效率,但是,他破坏了类的封装性和隐藏性,使得非成员函数能够访问类的私有成员。
友元函数:友元函数是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。
友元类:即一个类可以作另一个类的友元。当一个类作为另一个类的友元时,这就意味着这个类的所有成员函数都是另一个类的友元函数。
使用友元类时注意:
(1) 友元关系不能被继承。
(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
(3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明
(4)友元可以访问类的私有成员。
(5)只能出现在类定义内部,友元声明可以在类中的任何地方,一般放在类定义的开始或结尾。
(6)友元可以是普通的非成员函数,或前面定义的其他类的成员函数,或整个类。
(7)类必须将重载函数集中每一个希望设为友元的函数都声明为友元。
(8)友元关系不能继承,基类的友元对派生类的成员没有特殊的访问权限。如果基类被授予友元关系,则只有基类具有特殊的访问权限。该基类的派生类不能访问授予友元关系的类。
5.类对象类的定义(如类Screen) 不会引起存储区分配,只有当定义一个类的对象时系统才会分配存储区。每个类对象都有自己的类数据成员拷贝。
一个对象可以被同一类类型的另一个对象初始化或赋值。
6.inline与非inline
函数的定义在类体内提供的函数被称为“在类定义中定义的内联inline 函数”。也可以通过在成员函数的返回类型前显式地指定关键字inline。
7.类体函数定义
一两行以上的成员函数最好被定义在类体之外,这要求一个特殊的声明语化来标识一个函数是一个类的成员成员函数名,必须被它的类名限定修饰(::限定修饰)。
成员函数必须先在其类体内被声明,而且类体必须在成员函数被定义之前先出现。
8.构造函数
作用:管理类对象并处理诸如初始化,赋值,内存管理,类型转换,以及析构等活动,这些函数通常由编译器隐式调用 。
每次定义一个类对象或由new 表达式分配一个类对象时,都会调用它。构造函数的名字必须与类名相同。
定义:
9.this指针
通过返回return *this; 来实现myScreen.clear().move(2,2).set('*').display(); 需要注意的是成员函数的返回类型是Screen&,表示该成员返回一个引用,指向它
自己所属类类型的对象。
10.静态类成员:static
静态数据成员被当作该类类型的全局对象,对于非静态数据成员每个类对象都有自己的拷贝,而静态数据成员对每个类类型只有一个拷贝,静态数据成员只有一份,由该类类型的所有对象共享访问。
1 .静态数据成员没有进入程序的全局名字空间因此不存在与程序中其他全局名字冲突的可能性
2 .可以实现信息隐藏静态成员可以是private 成员而全局对象不能