类和对象
1、类的成员有成员变量
和成员函数
两种。
2、成员函数之间可以互相调用
,成员函数内部
可以访问成员变量
。
3、私有成员
只能在类
的成员函数内部访问。默认情况下,class 类的成员是私有的,struct 类的成员是公有的。
4、可以用“对象名.成员名
”、“引用名.成员名
”、“对象指针->成员名
”的方法访问对象
的成员变量
或调用成员函数
。成员函数被调用时,可以用上述三种方法指定函数是作用在哪个对象上的。
5、对象
所占用的存储空间的大小等于各成员变量
所占用的存储空间的大小之和(如果不考虑成员变量对齐问题的话)。
6、定义类时,如果一个构造函数都不写,则编译器自动生成默认(无参)构造函数和复制构造函数。如果编写了构造函数,则编译器不自动生成默认构造函数。一个类不一定会有默认构造函数,但一定会有复制构造函数。
7、任何生成对象的语句都要说明对象是用哪个构造函数初始化的
。即便定义对象数组,也要对数组中的每个元素如何初始化进行说明。如果不说明,则编译器认为对象是用默认构造函数或参数全部可以省略的构造函数初始化。在这种情况下,如果类没有默认构造函数或参数全部可以省略的构造函数,则编译出错。
8、对象在消亡时会调用析构函数。
9、每个对象有各自的一份普通成员变量,但是静态成员变量只有一份
,被所有对象所共享。静态成员函数不具体作用于某个对象。即便对象不存在,也可以访问类的静态成员。静态成员函数内部不能访问非静态成员变量,也不能调用非静态成员函数。
10、常量对象上面不能执行非常量成员函数,只能执行常量成员函数。
11、包含成员对象的类叫封闭类。任何能够生成封闭类对象的语句,都要说明对象中包含的成员对象是如何初始化的。如果不说明,则编译器认为成员对象是用默认构造函数或参数全部可以省略的构造函数初始化。
12、在封闭类的构造函数的初始化列表中可以说明成员对象如何初始化。封闭类对象生成时,先执行成员对象的构造函数,再执行自身的构造函数;封闭类对象消亡时,先执行自身的析构函数,再执行成员对象的析构函数。
13、const 成员
和引用成员
必须在构造函数的初始化列表中初始化
,此后值
不可修改。
14、友元分为友元函数和友元类。友元关系不能传递。
15、成员函数中出现的 this 指针
,就是指向成员函数所作用的对象的指针。因此,静态成员函数内部不能出现 this 指针
。成员函数实际上的参数个数比表面上看到的多一个,多出来的参数就是 this 指针。
在 C++ 中进行运算符重载时,有以下问题需要注意:
重载后运算符的含义应该符合原有用法习惯。例如重载+运算符,完成的功能就应该类似于做加法,在重载的+运算符中做减法是不合适的。此外,重载应尽量保留运算符原有的特性。
C++ 规定,运算符重载不改变运算符的优先级。
以下运算符不能被重载:.、.*、::、? :、sizeof。
重载运算符()、[]、->、或者赋值运算符=时,只能将它们重载为成员函数,不能重载为全局函数。
运算符重载的实质是将运算符重载为一个函数,使用运算符的表达式就被解释为对重载函数的调用。
运算符可以重载为全局函数。此时函数的参数个数就是运算符的操作数个数,运算符的操作数就成为函数的实参。
运算符也可以重载为成员函数。此时函数的参数个数就是运算符的操作数个数减一,运算符的操作数有一个成为函数作用的对象,其余的成为函数的实参。
必要时需要重载赋值运算符=,以避免两个对象内部的指针指向同一片存储空间。
运算符可以重载为全局函数,然后声明为类的友元。
<<和>>是在 iostream 中被重载,才成为所谓的“流插入运算符”和“流提取运算符”的。
类型的名字可以作为强制类型转换运算符,也可以被重载为类的成员函数。它能使得对象被自动转换为某种类型。
自增、自减运算符各有两种重载方式,用于区别前置用法和后置用法。
运算符重载不改变运算符的优先级。重载运算符时,应该尽量保留运算符原本的特性。
C++的头文件:
和C语言一样,C++ 头文件仍然以.h
为后缀,它们所包含的类、函数、宏等都是全局范围的。在C++中,标准库的命名空间为std。
开发程序是一项“烧脑”的工作,程序员不但要经过长期的知识学习和思维训练,还要做到一丝不苟,注意每一个细节和边界。即使这样,也不能防止程序出错。
专家指出,长期作息不规律 + 用脑过度的危害很大,可能会诱发神经衰弱、失眠等疾病。
程序员要注意劳逸结合,多去健身房,多跑步,多打球,多陪女朋友旅游等,
千万不要熬夜,以为深夜写代码效率高,这样会透支年轻的身体。