C++之类的引入

类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件

   1>C语言和C++中struct的区别
      1>C语言中:struct不能有函数成员,而C++的struct可以有.(C++中的struct能继承,能实现多态)。
      2>C中struct是没有权限的设置的,C++中,struct的成员默认访问说明符为public(为了与C兼容)也可以自己设置访问权限,class中的默认访问限定符为private
      3>在C里面实际上数据类型为 (struct XX) ,所以定义一个结构XX变量都要 带上struct. 而在C++里面实际上数据类型为XX(主要是因为结构体被当成类对待了),所以定义变量不需要 struct.
   2>C++中struct和class的区别
      在标准C++中
      a>struct成员默认的是public, C++默认private。    
      b>在用模版的时候只能写template <class Type>或template <typename Type>不能写template <struct Type>
   3>什么是封装?如何实现封装特性
      a>封装就是隐藏了对象的属性和实现的细节,仅把接口暴露与对象进行交互,将数据和操作方法结合
   4>C++如何实现封装特性?
       类+访问限定符
   5>如何在类外访问一个类中的私有成员变量?
     
(1)通过公共函数为私有成员
      (2)利用指针huoz或者引用访问私有数据成员
      (3)通过友元
   6>类的对象模型
      一个类的大小,实际就是该类中"非静态成员"之和,这里注意内存对齐,注意空类的大小(vs底下是1,因为要实列化对象,就要
     有独一无二的地址)
      在没有#pragma pack宏的情况下,vs编译器默认的对齐树是8,而gcc中默认的是4
    7>结构体内存对齐
       1>为什么要进行内存对齐?
         因为cpu对内存的读取操作是对齐的,如果x的地址不是4的倍数,那么读取这个x,需要读取两次共8个字节,
         然后还要将其拼接成一个int,这比存取对齐过的x要麻烦很多。
         CPU把内存当成是一块一块的,块的大小可以是2,4,8,16字节大小,因此CPU在读取内存时是一块一块进行 读取的
       2>如何知道结构体中某个成员相对于结构体起始位置的偏移量

        size_t offsetof( structName, memberName );
        #define offsetof(s,m) (size_t) &(((s*)0)->m)          
        因为类的基值0,所以m的地址就是其在结构体中的偏移地址
        &(((s*)0)->m)
       (s*)0:是骗编译器说有一个指向类(或者结构体)s的指针,它的值是0
        &(((s*)0)->m)这个是取结构体中s的成员m


        3>什么是大小端?
        大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中
           这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
           这和我们的阅读习惯一致。
        小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中
           这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

           short int x;//2个字节
           short int x;//2个字节
           char x0, x1;
           x = 0x1122;
           x0 = ((char*)&x)[0]; //低地址单元
           x1 = ((char*)&x)[1]; //高地址单元
           printf("%p\n",x0);
           printf("%p\n", x1);
           若x0=0x11,则是大端; 若x0=0x22,则是小端...

      大小端场景?
           在网络上传输数据时,由于数据传输的两端可能对应不同的硬件平台,采用的存储字节顺序也可能不一致,
           因此 TCP/IP 协议规定了在网络上必须采用网络字节顺序(也就是大端模式).
           网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以
           保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。
           主机字节序就是我们平常说的大端和小端模式:不同的 CPU 有不同的字节序类型,这些字节序是指整数
           在内存中保存的顺序 这个叫做主机序。

        函数原型定义在netinet/in.h里
        unsigned short int htons(unsigned short int hostshort):
        主机字节顺序转换成网络字节顺序,对无符号短型进行操作4bytes
        unsigned long int htonl(unsigned long int hostlong):
        主机字节顺序转换成网络字节顺序,对无符号长型进行操作8bytes
        unsigned short int ntohs(unsigned short int netshort):
        网络字节顺序转换成主机字节顺序,对无符号短型进行操作4bytes
        unsigned long int ntohl(unsigned long int netlong):
        网络字节顺序转换成主机字节顺序,对无符号长型进行操作8bytes

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值