《程序员面试宝典(二)》笔记

    眨眼大三就过了一半了,来年就要准备上战场了,感觉颇有压力。近日开始重新翻读C++,不看不知道,看了吓一跳,发现在自己不懂的还很多。于是下定决心,静心研读,打好基础,每日多待图书馆。

    近日看到了一本名叫《程序员面试宝典》的书,感觉里边讲的很多东西都很中肯,正好能打中我的缺点,于是每日去读一点,并把感觉比较重要的记在这里,方便以后阅读。

   一、static

   static可以限制作用域,即只能够在本文件中使用。

   (static的三种使用请参看本栏目中《

static关键字的作用

  》)

 

   二、类/结构体的大小

   空类的大小为1,不含虚函数的类的大小等于其去除所有方法后的大小,含虚函数(无论数量)大小+sizeof(int)(一个指针指向虚函数表)

   结构体(类)的大小问题:

(1)结构体对齐规则,自动设置下,按最大成员长度对齐

(2)继承规则,继承情况下子类与父类相互独立,子类的大小=父类大小+子类大小(不考虑继承时大小);

  子类的对齐时要考虑父类。

  需要特别指出的是,如果有虚函数继承,只需要加一次指针大小,而不需要父子都加。

class A
{
char a;
double c;
int b;
};
class B:public A
{
 int b;
};

sizeof(A) = 24;

sizeof(B) = 32;

   三、指针

    指针可以说是C++中一个很重要的概念,也是C++极有一用的一个特征。但是确也令很多人感到反感,确实,指针如果使用不好,极有可能带来灾难性的后果,这个我是深有体会的。

    废话少说,言归正传。

    1、注意指针类型

     int a[2][4] = {1,2,3,4,5,6,7,8};

     *(a+1) 为 5;

     int a[] = {1,2,3,4};

     *(m+1) = 2;

     *(&m+1) 指向第5个元素(虽然不存在)

    2、malloc/free C/C++语言中的库函数

       new/delete C++中的运算符

四、类的几点注意

   static成员必须在类声明以外显示初始化

   const成员必须在构造函数初始化列表中初始化

   class A{

   A():a(0){};

   const int a;

   static int b;

   static const int c=100;

  }

    int A::b = 0;

   struct与class的唯一区别

    默认成员保护级别与默认的派生保护级别

    class:private

    struct:public

    派生类构造函数的合成

    默认情况:先调用直接基类的默认构造函数,再调用自己的构造函数

    指定情况:class B:public A{

             B(int m,int n):A(n){}

     }//只能初始化直接基类

   析构函数:编译器显示地调用派生类对象基类部分的析构函数,每个析构函数只负责清除自己的成员

   派生类中定义的函数不重载基类成员,局部作用域中声明的函数不重载全局作用域中定义的函数

   例:void fun(int);

      void main{

      void fun();

      fun(1);//error

      }

    对象不是多态的,将派生类对象复制到基类对象时,派生类对象将被切掉。要想使用多态,必须使用

    引用或指针。


    一个空类将自动生成以下四个函数:

     A();

      A(const A&);

      A& operator=(const A&);

      ~A();

      C++新标准中加入了虚函数返回值的松散规则(下面这种写法是合法的)

     class A{

      public: virtual A* clone()=0;

      }

     class B:public A{

     public: virtual B* clone(){};

    }

五、宏定义

    条件编译、带参数宏定义(#/##)

    #define ABC(a) printf("this is "#a);

   #define s5(a) supper_ ## a

   void supper_printf( ){cout<<"super"<<endl;}

   int main(){s5(printf)();return 0;}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值