1 类的大小(sizeof(A))
类与结构一样都有字节对齐的问题, char 需要和就近的类型进行对齐
类中的普通函数不占用类的大小
类中虚函数占用一个地址位宽(4或8, 虚函数表指针),且不论有多少个虚函数,一共占这么多
类中的常量不占用类的大小,const static / enum{ q =1, p = 2};
类中static修饰的变量不占用类的大小,因为放在静态区域
子类的大小等于子类新增的加上父类的大小
2 派生
派生类中声明和基类同种类型,相同名称的普通成员变量时,派生类的新成员变量会自动屏蔽掉基类中的成员变量,
如果想用派生类区访问基类的成员变量, 则需要使用基类类名和作用域运算符,并且基类成员变量必须时public类型或者
protected类型,私有类型时拒绝访问的
子类继承父类的函数的时候,只能用来操作父类那个块域的数据。
--------------------------------------------------------------------------------------------------------------------------
派生类中不含对象成员:
创建派生对象: 基类构造函数->派生类构造函数
撤销派生对象:派生类析构函数->基类析构函数
派生类中含有对象成员:
定义派生对象: 基类构造函数->对象成员的构造函数->派生类构造函数
撤销派生对象:派生类构造函数->对象成员构造函数->基类构造函数
3 友元函数
是一种能够访问类中私有成员的非成员函数,一个类的友元函数对类成员的访问能力等于类的成员函数,可以访问类的
所有成员
4 字符数组和字符串
定义字符串结尾一定有‘\0' 字符数组不是必须的
5 try catch finally
try块不可以省略/可以使用多重catch块/finally 可以省略
try中有异常抛出,执行catch,执行finally ;
如果没有catch, 可以直接执行finally,方法就以抛出异常的方式结束,而finally 后的内容也不会被执行,
所以catch 和finally 不能同时省略。
6 c 语言中最简单的数据类型
整型: byte, short, int, long
实型: float, double
字符型:char
没有逻辑型,bool值得true和false都是用0和1表示的
7 源代码生成文件过程
预处理生成.i
编译生成.s -S参数将对源程序test.c进行预处理、编译,生成test.s文件
汇编生成.o -c参数将对源程序test.c进行预处理、编译、汇编操作,生成test.o文件
链接生成可执行文件
-o参数用于指定输出的文本,如果不指定输出文件则默认输出.out文件
-g选项,加入GDB能够使用的调试信息,使用GDB调试时比较方便
8 系统调用和库函数调用
系统调用:指最底层的一个调用,面向硬件,是操作系统的一部分
pwrite
库函数调用:面向应用开发,相当于应用程序的api,是语言或者应用程序的一部分。
fwrite/putc/putchar/getline/scanf
9 SNMP (简单网络管理协议)和 NMS(网络管理系统)
SNMP 基于TCP/IP协议工作,对网络中支持SNMP协议的设备进行管理,所有支持SNMP协议的设备都可以由SNMP统一管理
管理员可以使用统一的操作进行,不用担心设备的差异性。
NMS是一个网管平台,也叫管理站,负责网管命令的发出,数据存储,及数据分析。被管理的设备上要运行SNMP代理,代理实现设备与管理站的SNMP通信。
某个服务器安装NMS管理栈,其他被他管理的设备就要安装SNMP服务作为代理
10 类成员的初始化
static 修饰的变量在类外初始化,const修饰的在参数列表初始化
在构造函数中需要初始化列表初始化的有如下三种情况
1.带有 const修饰的类成员 ,如constinta ;2. 引用成员数据,如 int& p;
3.带有引用的类变量(如题目的对象c)
常量成员和引用成员自然是要初始化的,问题就在这static成员。
static成员是不允许在类内初始化的,除了const,那么static const 成员是不是在初始化列表中呢? 答案是NO一是static属于类,它在未实例化的时候就已经存在了,而 构造函数的初始化列表,只有在实例化的时候才执行。
二是static成员不属于对象。我们在 调用构造函数自然是创建对象,一个跟对象没直接关系的成员要它做什么呢
需要初始化的数据成员是对象(继承时调用基类构造函数) ;这个显然是不对的。下面代码能够很好说明了这个问题。c需要初始化不是因为它是类对象,是因为他的成员有引用。 ????????
class A {
private: int a;
};
class B : public A {
private: int aa;
public: B(int i ):aa(i),b(9){};
const int b;
A c;
};