知识点2

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; 

}; 

猜你喜欢

转载自blog.csdn.net/liu_fei_er/article/details/80224244