大学c++期末总结(4)

2018-12-22 20:10

其中括号中个各个值按顺序对结构体内的变量赋值。

(3) 若要调用结构体变量内的另外的结构体变量成员,则需要逐级引用。如

student1.birthday.year。

(4) 对结构体数组的初始化按照{{??},{??,{??}}的格式进行。 (5) 关于结构体所占内存的问题

对于一个含有多种变量的结构来说,它所占的内存空间并不是简单的将所有变量所需要的内存空间进行叠加得到的。由于计算机的内存对齐原理,分配内存是,总是以最大内存需求的变量作为最小单元来分配内存。

上面int型四个字节,short型2个字节 bool型一个字节 但是仍然要分配最大数据类型的字节数。所以会有这样的结论。

(6).操作符和->操作符的区别 .操作符只能 用于变量成员的访问如today.year ->操作符只能由一个指针变量使用如p->year 等价于(*p.year)

程序的内存分配

一个由C/C++编译的程序占用的内存分为以下几个部分

1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其

操作方式类似于数据结构中的栈。

2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回

收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的

全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另

一块区域。 - 程序结束后由系统释放。

4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放

5、程序代码区—存放函数体的二进制代码。

23:类和对象

(1) 类的四大基本特点:封装性,抽象性,多态,继承 (2) 类里面4个系统默认的函数:构造,析构,拷贝构造,赋值函数。且构造和

析构函数不能被显示调用。

(3) 类里面三种属性访问控制 private,protected,public (4) 类是抽象的,不会占用内存 (5) this指针,在调用成员函数时,会自动加载一个this指针指向调用的这个对象。

(注意,结构体没有this指针)

(6) 在外部定义成员函数时,要在函数名前面加上“类型名::”来说明这个函数式

这个类型里面的函数。

(7) 类的成员函数的存储方式,是以公用函数代码的形式存储的,也就是说,一

个类的大小,与其函数无关,只有数据有关,具体计算参照结构体。

24:对类的一些操作

(1) 为成员变量赋值(初始化)

方法1:定义共有成员函数进行赋值 方法2:自定义构造函数。

(2) 当类中涉及到指针的创建时,最好在析构函数内写上对指针的释放语句。 (3) 成员初始化表(调用表)对成员进行初始化,在继承和派生时用的较多。

类名::构造函数名(参数列表):成员初始化表 {

构造函数体 } 成员初始化表的格式为 成员函数名(参数)或 父类的构造函数名(参数)

(4) 默认的拷贝构造函数和赋值函数执行的是浅拷贝,也就是位对位的拷贝。所

以在处理指针等变量时会出错。

(5) 构造函数正序执行,析构函数逆序执行。 (6) 类和对象同样也有作用域和生命期,同样也有全局和局部,静态和自动。 (7) 自定义的类同样可以用于创建数组和指针。有所不同的是,仅仅创建指针时,

不会调用构造函数,创建数组时,有多少个元素就调用多少次构造函数。

(8) 指向对象成员函数的指针,没做要求,应该也不会考,具体形式应该是

数据类型 (类名:: *指针变量名)(参数列表) 这里要注意的是,中间的小括号不能省略,理由与指向函数的指针一样,因为()的优先级比*要高。

(9) 公用数据的保护

i:设置常对象,必须在定义的时候赋值,不是编译要求(可以通过编译,只是会提示warning),而是在定义之后无法通过任何手段去改名其值。(const与 类名可以交换)

ii:设置常成员函数,常成员函数可以访问对象的数据,但是不能改变它们(除了被申明为mutable 即可变的数据成员)。需要注意的是,常成员函数的const要放在函数名和括号之后,如void f()const。

iii:常数据成员,不能被修改的成员数据,只能通过构造函数的调用表对齐进行初始化。

(10) 指向对象的常指针和指向常对象的指针

将指针变量声明为const,形式为:类名 * const 指针变量名,使其指向不变,但是仍可以改变其指向的值。使用价值:固定指针,防止误操作。

将指针声明为指向常量的指针,形式为:const 类型名 *指针变量名,使其不能通过间访来改变指向的值,并且,指向常量的指针必须被声明为const类,但是const类的指针同样可也以指向变量,只是不能通过间访指针来改变变量的值。如下图。

(11) 静态数据成员以及静态成员函数(不是特别重点)

静态数据成员:

实现:在定义前加关键字static。

一旦申明为静态数据成员(必须在每个类里面都申明),则所有对象(定义过该数据成员的)均可以使用它,并且对应的值都相同(类似于静态变量),并且,该静态数据成员仍然受到访问权限的控制。 静态数据成员的初始化必须在外部,其具体形式为: 数据类型 类名::静态数据成员名=初值。

需要注意的是,不能用构造函数的参数列表对其进行初始化。 静态成员函数:

静态成员函数不属于某个具体的对象,也就没有this指针,所以就不能访问本类中的非静态成员。所以静态成员函数经常拿来引用静态数据成员。

(12) 友元

只需要注意友元函数并不属于类。所以不受访问控制影响。在外部定义的时候也不需要加域操作符::。 同时可以引申为友元类,即友元类中的所有函数都可以使用当前类的私有成员。

25:运算符重载

(1) 记住五个不能被重载的运算符: ?:,.,::,sizeof,*。 (2) 大多数运算符都应被设为成员函数,由于有this指针的存在,所以重载时,

参数的个数比原操作数少1。

(3) 有三个操作符的重载必须为友元函数:即流插入“<<”和流提取“>>”,

类型转换运算符。

(4) 函数格式:

返回类型 operator 操作符(参数列表)

在声明为成员函数并在外部定义时,需要在operator前加上类名::

(5) 有三个运算符重载的返回类型是本身的引用 一个是<<运算符,一个是>>

运算符,一个是=运算符。特别的,<<运算符的返回类型是 ostream&,>>运算符的返回类型是istream&。

(就是把i-o-stream拆分出来)

(6) 运算符重载的原则

不改变操作数,不改变优先级,不改变结合性,不能有默认参数(若有就改变了操作数),必须和用户定义类的对象一起使用并且其参数至少有一个类的对象。


大学c++期末总结(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:对海洋的重要性及南海和钓鱼岛问题的思考

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: