长春电脑培训吧 关注:32贴子:175
  • 9回复贴,共1

【点通计算机培训学校〗全面整理的C++面试题

只看楼主收藏回复

请您慢慢看.有不明白的可以与我校联系.


1楼2012-10-21 10:09回复

    1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的。 private 也被集成,只事派生类没有访问权限而已 virtual可加可不加子类的空间里有父类的所有变量(static除外) 同一个函数只存在一个实体(inline除外) 子类覆盖它的函数不加virtual ,也能实现多态。在子类的空间里,有父类的私有变量。私有变量不能直接访问。


    2楼2012-10-21 10:09
    回复
      2.输入一个字符串,将其逆序后输出。(使用C++,不建议用伪码) #include <iostream>
      using namespace std;
      void main()
      {
      char a[50];memset(a,0,sizeof(a));
      int i=0,j;
      char t;
      cin.getline(a,50,'/n');
      for(i=0,j=strlen(a)-1;i<strlen(a)/2;i++,j--)
      {
      t=a[i];
      a[i]=a[j];
      a[j]=t;
      }
      cout<<a<<endl;
      } //第二种 string str;
      cin>>str;
      str.replace;
      cout<<str;
      --------------------------------------------------------------------------
      


      3楼2012-10-21 10:10
      回复
        3.请简单描述Windows内存管理的方法。内存管理是操作系统中的重要部分,两三句话恐怕谁也说不清楚吧~~
        我先说个大概,希望能够抛砖引玉吧当程序运行时需要从内存中读出这段程序的代码。代码的位置必须在物理内存中才能被运行,由于现在的操作系统中有非常多的程序运行着,内存中不能够完全放下,所以引出了虚拟内存的概念。把哪些不常用的程序片断就放入虚拟内存,当需要用到它的时候在load入主存(物理内存)中。这个就是内存管理所要做的事。内存管理还有另外一件事需要做:计算程序片段在主存中的物理位置,以便CPU调度。内存管理有块式管理,页式管理,段式和段页式管理。现在常用段页式管理块式管理:把主存分为一大块、一大块的,当所需的程序片断不在主存时就分配一块主存空间,把程 序片断load入主存,就算所需的程序片度只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了50%的内存空间,但时易于管理。页式管理:把主存分为一页一页的,每一页的空间要比一块一块的空间小很多,显然这种方法的空间利用率要比块式管理高很多。段式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方法在空间利用率上又比页式管理高很多,但是也有另外一个缺点。一个程序片断可能会被分为几十段,这样很多时间就会被浪费在计算每一段的物理地址上(计算机最耗时间的大家都知道是I/O吧)。段页式管理:结合了段式管理和页式管理的优点。把主存分为若干页,每一页又分为若干段。好处就很明显,不用我多说了吧。各种内存管理都有它自己的方法来计算出程序片断在主存中的物理地址,其实都很相似。这只是一个大概而已,不足以说明内存管理的皮毛。无论哪一本操作系统书上都有详细的讲解
        --------------------------------------------------------------------------
        


        4楼2012-10-21 10:10
        回复
          4.
          #include "stdafx.h"
          #define SQR(X) X*X int main(int argc, char* argv[])
          {
          int a = 10;
          int k = 2;
          int m = 1; a /= SQR(k+m)/SQR(k+m);
          printf("%d/n",a); return 0;
          }
          这道题目的结果是什么啊? define 只是定义而已,在编择时只是简单代换X*X而已,并不经过算术法则的 a /= (k+m)*(k+m)/(k+m)*(k+m);
          =>a /= (k+m)*1*(k+m);
          =>a = a/9;
          =>a = 1; --------------------------------------------------------------------------
          


          5楼2012-10-21 10:11
          回复
            5.
            const 符号常量;
            (1)const char *p
            (2)char const *p
            (3)char * const p
            说明上面三种描述的区别;
            如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
            如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。 (1)const char *p 一个指向char类型的const对象指针,p不是常量,我们可以修改p的值,使其指向不同的char,但是不能改变它指向非char对象,如:
            const char *p;
            char c1='a';
            char c2='b';
            p=&c1;//ok
            p=&c2;//ok
            *p=c1;//error (2)char const *p
            (3)char * const p 这两个好象是一样的,此时*p可以修改,而p不能修改。 (4)const char * const p
            这种是地址及指向对象都不能修改。 --------------------------------------------------------------------------
            


            6楼2012-10-21 10:12
            回复
              6.下面是C语言中两种if语句判断方式。请问哪种写法更好?为什么?
              int n;
              if (n == 10) // 第一种判断方式
              if (10 == n) // 第二种判断方式如果少了个=号,编译时就会报错,减少了出错的可能行,可以检测出是否少了= --------------------------------------------------------------------------
              


              7楼2012-10-21 10:12
              回复
                =============================================================
                本文主要包括二个部分,第一部分重点介绍在VC中,怎么样采用sizeof来求结构的大小,以及容易出现的问题,并给出解决问题的方法,第二部分总结出VC中sizeof的主要用法。 1、 sizeof应用在结构上的情况 请看下面的结构: struct MyStruct { double dda1; char dda; int type }; 对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求: sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13 但是当在VC中测试上面结构的大小时,你会发现sizeof(MyStruct)为16。你知道为什么在VC中会得出这样一个结果吗? 其实,这是VC对变量存储的一个特殊处理。为了提高CPU的存储速度,VC对一些变量的起始地址做了"对齐"处理。在默认情况下,VC规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。下面列出常用类型的对齐方式(vc6.0,32位系统)。 类型
                对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量) Char
                偏移量必须为sizeof(char)即1的倍数 int
                偏移量必须为sizeof(int)即4的倍数 float
                偏移量必须为sizeof(float)即4的倍数 double
                偏移量必须为sizeof(double)即8的倍数 Short
                偏移量必须为sizeof(short)即2的倍数 各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对齐方式调整位置,空缺的字节VC会自动填充。同时VC为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节。 下面用前面的例子来说明VC到底怎么样来存放结构的。 struct MyStruct { double dda1; char dda; int type }; 为上面的结构分配空间的时候,VC根据成员变量出现的顺序和对齐方式,先为第一个成员dda1分配空间,其起始地址跟结构的起始地址相同(刚好偏移量0刚好为sizeof(double)的倍数),该成员变量占用sizeof(double)=8个字节;接下来为第二个成员dda分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为8,是sizeof(char)的倍数,所以把dda存放在偏移量为8的地方满足对齐方式,该成员变量占用sizeof(char)=1个字节;接下来为第三个成员type分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为9,不是sizeof(int)=4的倍数,为了满足对齐方式对偏移量的约束问题,VC自动填充3个字节(这三个字节没有放什么东西),这时下一个可以分配的地址对于结构的起始地址的偏移量为12,刚好是sizeof(int)=4的倍数,所以把type存放在偏移量为12的地方,该成员变量占用sizeof(int)=4个字节;这时整个结构的成员变量已经都分配了空间,总的占用的空间大小为:8+1+3+4=16,刚好为结构的字节边界数(即结构中占用最大空间的类型所占用的字节数sizeof(double)=8)的倍数,所以没有空缺的字节需要填充。所以整个结构的大小为:sizeof(MyStruct)=8+1+3+4=16,其中有3个字节是VC自动填充的,没有放任何有意义的东西。 下面再举个例子,交换一下上面的MyStruct的成员变量的位置,使它变成下面的情况: struct MyStruct { char dda; double dda1; int type }; 这个结构占用的空间为多大呢?在VC6.0环境下,可以得到sizeof(MyStruc)为24。结合上面提到的分配空间的一些原则,分析下VC怎么样为上面的结构分配空间的。(简单说明) struct MyStruct { char dda;//偏移量为0,满足对齐方式,dda占用1个字节; double dda1;//下一个可用的地址的偏移量为1,不是sizeof(double)=8 //的倍数,需要补足7个字节才能使偏移量变为8(满足对齐 //方式),因此VC自动填充7个字节,dda1存放在偏移量为8 //的地址上,它占用8个字节。 int type;//下一个可用的地址的偏移量为16,是sizeof(int)=4的倍 //数,满足int的对齐方式,所以不需要VC自动填充,type存 //放在偏移量为16的地址上,它占用4个字节。 };//所有成员变量都分配了空间,空间总的大小为1+7+8+4=20,不是结构 //的节边界数(即结构中占用最大空间的类型所占用的字节数sizeof //(double)=8)的倍数,所以需要填充4个字节,以满足结构的大小为 //sizeof(double)=8的倍数。 所以该结构总的大小为:sizeof(MyStruc)为1+7+8+4+4=24。其中总的有7+4=11个字节是VC自动填充的,没有放任何有意义的东西。 VC对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式。 VC中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构的总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数; 否则必须为n的倍数。


                11楼2012-10-21 10:45
                回复
                  25.i最后等于多少?
                  int i = 1;
                  int j = i++;
                  if((i>j++) && (i++ == j)) i+=j; 答:
                  i = 5 --------------------------------------------------------------------------
                  26.
                  unsigned short array[]={1,2,3,4,5,6,7};
                  int i = 3;
                  *(array + i) = ? 答:
                  4 --------------------------------------------------------------------------
                  27.
                  class A
                  {
                  virtual void func1();
                  void func2();
                  }
                  Class B: class A
                  {
                  void func1(){cout << "fun1 in class B" << endl;}
                  virtual void func2(){cout << "fun2 in class B" << endl;}
                  }
                  A, A中的func1和B中的func2都是虚函数.
                  B, A中的func1和B中的func2都不是虚函数.
                  C, A中的func2是虚函数.,B中的func1不是虚函数.
                  D, A中的func2不是虚函数,B中的func1是虚函数. 答:
                  A --------------------------------------------------------------------------
                  28.
                  数据库:抽出部门,平均工资,要求按部门的字符串顺序排序,不能含有"human resource"部门, employee结构如下:employee_id, employee_name, depart_id,depart_name,wage 答:
                  select depart_name, avg(wage)
                  from employee
                  where depart_name <> 'human resource'
                  group by depart_name
                  order by depart_name --------------------------------------------------------------------------
                  29.
                  给定如下SQL数据库:Test(num INT(4)) 请用一条SQL语句返回num的最小值,但不许使用统计功能,如MIN,MAX等答:
                  select top 1 num
                  from Test
                  order by num desc --------------------------------------------------------------------------
                  30.
                  输出下面程序结果。 #include <iostream.h> class A
                  {
                  public:
                  virtual void print(void)
                  {
                  cout<<"A::print()"<<endl;
                  }
                  };
                  class B:public A
                  {
                  public:
                  virtual void print(void)
                  {
                  cout<<"B::print()"<<endl;
                  };
                  };
                  class C:public B
                  {
                  public:
                  virtual void print(void)
                  {
                  cout<<"C::print()"<<endl;
                  }
                  };
                  void print(A a)
                  {
                  a.print();
                  }
                  void main(void)
                  {
                  A a, *pa,*pb,*pc;
                  B b;
                  C c;
                  pa=&a;
                  pb=&b;
                  pc=&c;
                  a.print();
                  b.print();
                  c.print();
                  pa->print();
                  pb->print();
                  pc->print();
                  print(a);
                  print(b);
                  print(c);
                  } A:
                  A::print()
                  B::print()
                  C::print()
                  A::print()
                  B::print()
                  C::print()
                  A::print()
                  A::print()
                  A::print() --------------------------------------------------------------------------
                  


                  13楼2012-10-21 10:46
                  回复
                    101个先取出2堆,
                    33,33
                    第一次称,如果不相等,说明有一堆重或轻
                    那么把重的那堆拿下来,再放另外35个中的33
                    如果相等,说明假的重,如果不相等,新放上去的还是重的话,说明假的轻(不可能新放上去的轻) 第一次称,如果相等的话,这66个肯定都是真的,从这66个中取出35个来,与剩下的没称过的35个比
                    下面就不用说了方法二:
                    第3题也可以拿A(50),B(50)比一下,一样的话拿剩下的一个和真的比一下。
                    如果不一样,就拿其中的一堆。比如A(50)再分成两堆25比一下,一样的话就在
                    B(50)中,不一样就在A(50)中,结合第一次的结果就知道了。 --------------------------------------------------------------------------
                    37.static变量和static 函数各有什么特点?答:
                    static变量:在程序运行期内一直有效,如果定义在函数外,则在编译单元内可见,如果在函数内,在在定义的block内可见;
                    static函数:在编译单元内可见; --------------------------------------------------------------------------
                    38.用C 写一个输入的整数,倒着输出整数的函数,要求用递归方法 ; 答:
                    void fun( int a )
                    {
                    printf( "%d", a%10 );
                    a /= 10;
                    if( a <=0 )return; fun( a );
                    } --------------------------------------------------------------------------
                    39.写出程序结果:
                    void Func(char str[100])
                    {
                    printf("%d/n", sizeof(str));
                    } 答:
                    4
                    分析:
                    指针长度 --------------------------------------------------------------------------
                    40.int id[sizeof(unsigned long)];
                    这个对吗?为什么?? 答:

                    这个 sizeof是编译时运算符,编译时就确定了
                    可以看成和机器有关的常量。
                    本文主要包括二个部分,第一部分重点介绍在VC中,怎么样采用sizeof来求结构的大小,以及容易出现的问题,并给出解决问题的方法,第二部分总结出VC中sizeof的主要用法。 1、 sizeof应用在结构上的情况 请看下面的结构: struct MyStruct { double dda1; char dda; int type }; 对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求: sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13 但是当在VC中测试上面结构的大小时,你会发现sizeof(MyStruct)为16。你知道为什么在VC中会得出这样一个结果吗? 其实,这是VC对变量存储的一个特殊处理。为了提高CPU的存储速度,VC对一些变量的起始地址做了"对齐"处理。在默认情况下,VC规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。下面列出常用类型的对齐方式(vc6.0,32位系统)。 类型
                    对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量) Char
                    偏移量必须为sizeof(char)即1的倍数 int
                    偏移量必须为sizeof(int)即4的倍数 float
                    偏移量必须为sizeof(float)即4的倍数 double
                    偏移量必须为sizeof(double)即8的倍数 Short
                    偏移量必须为sizeof(short)即2的倍数 各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对齐方式调整位置,空缺的字节VC会自动填充。同时VC为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的


                    15楼2012-10-21 11:10
                    回复