• 面试6-----11 const和静态变量那些事儿


    6 看看const和指针的那些事儿

      const在int*左边

           const在int*右边

      const在int*两边------>请看代码注释

    (1)代码

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     const int x = 1;//x为整形常量
     6     int b = 20;
     7     int c = 30;
     8     
     9     const int* a1 = &b;//const在int*的左边 用来修饰指针指向的变量即指针指向的为常量
    10     int* const a2 = &b;//const在int*的右边  用来修饰指针本身 即指针本身是常量 所以不能修改本身
    11     const int* const a3 = &b;//const出现在int*的两侧 所以不仅本身不能修改 指向的内容也不可以修改
    12 
    13     //x = 2;//这里报错 左值为常量
    14 
    15     a1 = &c;
    16     //*a1 = 1;//a1指向的内容不可以改变
    17 
    18     //a2 = &c;
    19     //*a2 = 1;//const在int*的右边  用来修饰指针本身 即指针本身是常量 所以不能修改本身
    20 
    21     //a3 = &c;
    22     //*a3 = 1;
    23     return 1;
    24 }
    View Code

    7 说明const与#define的特点与区别

    (1)分别看看const和#define

    1 #define a 10
    2 int b;
    3 b = 2*a;

      #define:

        a:编译器最开始的时候就会将#define a以后所有的代码中的a全部替换为10,然后进行编译

        b:生命周期止于编译器,存在于程序的代码段,实际上就是一个常数

        c:没有数据类型

      const:

        a:数据段,并分配了空间

        b:有数据类型

        c:可以进行安全性检查

    8 c++中const有什么作用(至少三个)

      (1)const定义的常量,编译器可以对其进行数据类型的安全检查

      (2)const修饰函数形式参数 ,输入参数作为用户自定义类型和抽象数据类型是,将值传递改为const &传递可以提高效率

    1 void func(A a)
    2 void func(A const &a)

        a:第一个函数会产生临时对象用于复制参数a,临时对象的构造 析构等都将消耗事件

        b:引用传递不需要产生临时对象,但是只用a会改变a,所以加上const修饰

      (3)const修饰函数的返回值:比如指针传递的函数返回值加const,返回就不能被直接修改,而且返回值只能被赋值给加const修改的同类型指针

    1 const char *getchar(void){}
    2 char *ch = Getchar();//error
    3 const char *ch=Getchar();//correct

      (4)const修饰类的成员函数,任何不修改数据成员的函数都应该加上const修饰(这样如果不小心修改了成员会报错提醒我们)

    9 static的作用(至少两个)

      (1) 函数体内,被申明为静态的变量,函数被调用的过程中都不会改变

      (2)在整个模块内(函数体外),被申明的静态变量可以被模块内所有的函数访问,但是不能被模块外的访问,本地全局变量

      (3)模块内,静态函数只能被这一模块内的其他函数调用。也就是这个函数被限制在声明它的模块的本地范围内使用(当前文件)

    10static全局变量与普通的全局变量区别(c++)

      (1)存储方式都一样------>静态存储方式

      (2)static全局:限制了作用域,只能是定义变量的当前文件有效(如果源程序有多个文件)

        普通全局:在各个原文件都有效

      (3)static函数与普通函数作用域不同:

        static函数:作用域本文件

    总之:

      (1) static全局与普通全局:

        static全局只初始化一次,防止其他文件使用

      (2)static局部和不同局部:

        static局部变量初始化一次,下一次依据上一次结果值

      (3)static函数与普通函数:

        static函数在内存中只有一份,普通函数每次调用维持一份复制品

    11 c++类的静态成员

     1 #include <iostream>
     2 using namespace std;
     3 class widget
     4 {
     5 public:
     6     widget()
     7     {
     8         count++;
     9     }
    10     ~widget()
    11     {
    12         --count;
    13     }
    14     static int num()
    15     {
    16         return count;
    17     }
    18 private:
    19     static int count;
    20 };
    21 int widget::count = 0;
    22 
    23 int main()
    24 {
    25     widget x, y;
    26     cout << "the num is" << widget::num() << endl;
    27     if (widget::num() > 1)
    28     {
    29         widget x, y, z;
    30         cout << "the num is" << widget::num() << endl;
    31     }
    32     widget z;
    33     cout << "the num is" << widget::num() << endl;
    34     return 0;
    35 }

    (1)首先类中的静态成员或者方法不属于类的实例

    (2)count的值就是类widget实例的个数

    (3)结果

    25行中两个实例下x,y然后29行3个实例,但是出了代码块(也就是括号)就没有了,最后一个实例所以3个。

    好了,今天的这部分任务结束(呜呜呜,今天电脑好卡!!!!!!),小伙伴加油

  • 相关阅读:
    软件工程——团队作业个人总结
    软件工程——团队作业4
    软件工程——团队答辩
    JavaScript编码规范
    html编码规范
    软件工程——团队作业三
    软件工程——团队作业二
    ·软件工程——团队作业1
    软件工程第二次作业——心得体会(结对编程)
    软件工程第二次作业(结对编程)
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/7904459.html
Copyright © 2020-2023  润新知