对象,类,友元,构造函数,析构函数

类和对象:

从面向对象程序设计理论的角度来说,类是对一类对象的抽象,而对象是类的具体实例;从程序设计语言的角度来说,类是一种复杂的自定义的构造数据类型,对象是属于这种数据类型的变量。1)类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本身不存在于内存空间中。2)对象是一个动态的概念。每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为。对象的属性可以随着它自己的行为而发生改变。

成员函数和成员变量:

C++将对象具有的属性抽象为数据成员,将对象具有的行为抽象为成员函数,并将其均封装在一个类中。 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存。但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类型或者说是一种模板,本身不占用内存空间,而变量的值则需要内存来存储。

结构体和类:

1)类是引用类型在堆上分配,结构体是值类型在栈上分配。2) 类的实例(对象)进行赋值只是复制了引用,都指向同一段实际对象分配的内存。结构体的赋值,将分配产生一个新的对象。3)类有构造函数,析构函数。结构体没有构造函数,但可以添加,而没有析构函数。4)结构体不可以继承或被继承。5)轻量级的对象可以使用结构体,而数据量大或有复杂处理逻辑的对象最好使用类。

共有成员和私有成员:

关键字分为 private 、 public 、 protected 三种,成为访问权限控制符,用来设置数据成员跟成员函数的访问控制属性。1) private 属性表示数据成员或方法是类的私有成员,这类成员只允许被本类的成员函数访问或调用。2)  public 属性表示数据成员或方法是公有成员,这类成员允许被本类或其他类的成员函数(通过对象)访问或调用。 3) protected 属性表示数据成员或方法是保护成员,这类成员允许被本类的成员函数和派生类的成员函数访问或调用。

构造函数和析构函数:

1)在定义类的时候不允许给数据成员设置初始值(类只定义数据类型,还没有实例化,没有对象,也就没办法存储数据),所以需要构造函数对对象进行初始化。2 )构造函数是在对象被创建时使用特定的值去构造对象,使得在声明对象时就能自动完成对象的初始化。3)析构函数是在删除一个对象前,用于释放对象所占内存的函数。
大致流程如下:
创建对象->分配内存->构造函数对对象初始化->析构函数释放对象所占内存。

拷贝构造函数:

1)拷贝构造函数是用来完成基于对象的同一类其他对象的构造及初始化。拷贝构造函数要把一个已有的对象的数据成员赋值给新创建的对象。2)若在定义类时没有定义拷贝构造函数。系统会自动添加默认的拷贝构造函数,其功能是利用作为初始值对象的每个数据成员的值,去初始化新创建的对象的数据成员,且其拷贝方式是浅拷贝工作方式。4)可类比于结构体赋值。

内联函数:

1)作用:在编译器编译时会将出现的内联函数的表达式替换成内联函数函数体(可类比于 #define ),而不是像其他函数一样在运行时替换。所以内联函数的出现可以提高程序的效率,这是一种牺牲空间换取时间的方法。2)内联函数一般是1~5行的函数。3)内联函数内不允许出现循环和开关语句。4)内敛函数的定义必须出现在内联函数第一次调用之前。
5)类内声明的函数是内联函数。

内存区域内的堆和栈:

1)堆(stack)和栈(heap)都是用来在 RAM 中存放数据的地方。2)栈的优势:栈的数据可以共享,且存取速度要比堆快,仅次于位于CPU中的寄存器。缺点:存在栈中的数据大小和生存期必须是确定的,缺乏灵活性。3)堆的优势:可以动态分配内存空间,生存期也不必事先告诉编译器,垃圾收集器会自动回收不再使用的数据。缺点:要在运行时分配内存空间,存取速度较慢。

this 指针:

this 指针是指向实例化对象本身时候的一个指针,里面存储的是对象本身的地址,通过对象地址可以访问内部成员函数和成员变量。

静态成员:

1)静态数据成员的提出是为了在不破坏数据隐藏的前提下,解决不同对象之间的数据共享的问题。2)静态成员函数是专门用于访问静态数据成员的成员函数。 3)共享数据的典型使用场景就是计数,设置一个共享的变量即可以实现计数功能。4)一个类中可以有一个或多个静态成员变量,所有的对象都共享这些静态成员变量,都可以引用他。5)static 成员变量和普通static 变量一样,都在内存分区中的全局全局数据区分配内存,到程序结束时才释放。这就意味着,static 成员变量不随对象的创建而分配内存,也不随对象的销毁而释放内存。而普通成员变量在对象创建时分配内存,在对象销毁时释放内存。

你可能感兴趣的:(对象,类,友元,构造函数,析构函数)