C++的类、对象与成员
1.声明一个类
类是用户自定义的类型,如果程序中要用到类,必须先声明定义。
类声明的语法形式如下:
class 类名称
{
public:
公有成员(外部接口)
protected:
保护型成员
private:
私有成员
}
Class为关键字, 声明一个类时要用到它 。
当然,这里的public、protected和private关键字可以任意换顺序,比如先声明私有成员再声明其他的也可以,每个关键字也可以出现多次,比如声明一些public的成员,后面又出了个public声明了另一些成员,也是可以的,但是一般我们还是按照上面的形式来声明类。
2、创建一个对象
定义一个对象时,开头用类名,空一格,再编写要定义的对象名即可。
如:Computer ThinkPad;
类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。
与结构体一样,类只是一种复杂数据类型的声明,不占用内存空间。而对象是类这种数据类型的一个变量,占用内存空间。
类与对象的区别:
类只是个抽象名词,而对象则是实际的个体。
3、对象与类里成员的关系
对象可以用点运算符“.”来访问该对象的数据成员并给它们赋值,使用时不能遗漏。
如:ThinkPad . CPU
注意:
》不要混淆类和对象,不要给类赋值。
》对象只能类中已经存在的成员。
4、类成员的访问控制
protect,public,private 的区别?
public是这个程序的每一处都能访问,无论是在本类内还本类外
protected则是在本类内和友类,子类中才能访问
private则只能在本类内才能访问,其它地方则不能
public修饰的成员变量
在程序的任何地方都可以被访问,就是公共变量的意思,不需要通过成员函数就可以由类的实例直接访问
private修饰的成员变量
只有类内可直接访问,私有的,类的实例要通过成员函数才可以访问,这个可以起到信息隐藏
protected是受保护变量
类内和子类可直接访问,也就是说,基类中有protected成员,子类继承于基类,那么也可以访问基类的protected成员,要是基类是private成员,则对于子类也是隐藏的,不可访问
5、成员函数的声明和定义
每个成员函数都有它的声明部分和定义部分。
声明部分仅是说明该函数的参数类型以及返回值类型
定义部分则是对函数的功能进行了实现
类是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型。类这种数据类型是一个包含成员变量和成员函数的一个集合。
类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存空间。但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类型,本身不占用内存空间,而变量的值则需要内存来存储。
类的成员函数也和普通函数一样,都有返回值和参数列表,它与一般函数的区别是:成员函数是一个类的成员,出现在类体中,它的作用范围由类来决定;而普通函数是独立的,作用范围是全局的,或位于某个命名空间内。
但当成员函数定义在类外时,就必须在函数名前面加上类名予以限定。
::被称为域解析符(也称作用域运算符或作用域限定符),
用来连接类名和函数名,指明当前函数属于哪个类。
成员函数必须先在类体中作原型声明,然后在类外定义,也就是说类体的位置应在函数定义之前,否则编译时会出错。
虽然成员函数在类的外部定义,但在调用时会根据在类中声明的函数原型找到函数的定义(函数代码),从而执行该函数。
6、普通内联函数
当定义了一个函数后,编译器就会在内存中为其创建一个指令集,当我们条用这个函数地,程序就会跳转到指令集处。当该函数运行完毕后,程序又会返回到原来执行调用该函数语句的下一行执行。 假如对该函数执行上百次调用,就要来回跳转上百次,这会影响到程序的执行效率。
C++中解决的方法,是使用关键字inline声明函数,如:
inline int func ( ) ;
则编译器将不会创建真正的函数,而是将这个内联函数的所有代码复制到调用函数中,这样程序在执行该调用函数时就不需要来回跳转,自然就提高了程序运行的效率。
不过,假如调用内联函数也超过上百次时,其代码要复制上百次,这样增大了代码的体积,会降低代码执行的效率。
所以说这是一把双刃剑,如果函数很小,多次复制也增加没多少体积,可以视情况适当使用内联函数。