C\C++语言基础细节(一)

全局变量本身就是静态存储方式,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期,把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值

程序的局部变量存在于栈中,全局变量存在于静态区中,动态申请数据存在于堆中。

1、switch(c)语句中c可以是int ,long,char ,float,unsigned int 类型。( 错,不能用实形

2、指针在任何情况下都可进行>, <,>=,<=,==运算。( 错误 

运算时它们的指针类型要相同,指针级数也要相同才行
3、sizeof()会计算字符串中包括'\0'在内的字节,而strlen()计算时不包括'\0'
4、char *p="abcdef";
     printf("%d \n",sizeof(p));//4
     printf("%d \n",strlen(p));//6

5、

  int arr[]={6,7,8,9,10};
       int *ptr=arr;
       *(ptr++)+=123;
       printf("%d,%d\n",*(ptr),*(++ptr));//8,8
int* ptr=arr;这一句使得ptr指针指向arr数组的第一个数,也就是6;
*(ptr++)+=123;这个不是先执行括号里面的,因为里面的是ptr++,这是先取值,再自加,这一句相当于*ptr+=123;ptr++;两句。实际就是使得*ptr指针的内容加上123。也就是数组第一个6加上123变成129。做完之后ptr自加。这时候ptr指针指向数组的第二个数7;
最后一个printf语句,先执行的是后面的*(++ptr)而不是*(ptr),所以ptr先自增,使得指针指向8,然后输出。这样就输出的都是8了。你可以把*(++ptr)和*(ptr)的位置对调一下,那么先执行*(ptr),再执行*(++ptr)。那么输出的就是8,7了。

这道题目的意义不大,因为在不同的编译器里printf的参数的方向是不一样的,在vc6.0下是从右到左,这里先*(++ptr) *pt,于是结果为8

6、
class A()
{
public:
 int a;
static int b;
A();
~A();
};
则sizeof(A);因为静态变量存在全局数据区,而sizeof()只是计算栈中分配的大小,不会将b的内存空间计算在内,所以sizeof(A)=4.
7、
char *ss="01234";则sizeof(ss)=4,sizeof(*ss)=1;*ss是第一个字符。
char ss[100]="0123456789";
则sizeof(ss)=100;ss表示在内存中分配的大小100*1
strlen(ss)=10;它的内部实现是用一个循环来计算字符串的长度,直到'\0'为止。
 
8、
int ss[100]="0123456789";
sizeof(ss)=100*4=400;
strlen(ss)错误,strlen的参数只能是char *,且必须以'\0'结尾。
9、抽象类是带有纯虚函数的类。
虚基类:将共同基类设置为虚基类,这时从不同路径继承过来的同名数据成员在内存中就只有一个副本,同一个函数名也只有一个映射。
其语法形式:
classB
 
 
  {
  };
  class D1:virtual public B
  {
  };
  class D2:virtual publicB
  {
  };
  class C:public D1,public D2
    {
   }
10、运算符的重载
运算符的重载有两种形式:即重载为类的非静态成员函数和重载为非成员函数
语法形式:
返回类型 operator 运算符 (形参表)
{
      函数体
}

11、虚函数
虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员函数实现的时候
#include<iostream>
 
 
  using namespace std;
  class Cshape {
  public:
  void SetColor(int color) { m_nColor=color;}
  virtualvoid Display( void) { cout<<"Cshape"<<endl; }
  private:
  int m_nColor;
  };
  class Crectangle: public Cshape {
  public:
  virtualvoid Display( void) { cout<<"Crectangle"<<endl; }
  };
  class Ctriangle: public Cshape {
  virtual void Display( void) { cout<<"Ctriangle"<<endl; }
  };
  class Cellipse :public Cshape {
  public:
  virtualvoid Display(void) { cout<<"Cellipse"<<endl;}
  };
  voidmain()
  {
  Cshape obShape;
  Cellipse obEllipse;
  Ctriangle obTriangle;
  Crectangle obRectangle;
  Cshape * pShape[4]= { &obShape,&obEllipse,&obTriangle,& obRectangle };
  forint I= 0; I< 4; I++)
  pShape[I]->Display( );
  }
 

12、纯虚函数与抽象类
带有纯虚函数的类是抽象类。抽象类的主要作用是通过它为一个类族建立一个公共接口,使它们能够更有效地发挥多态特性。抽象类声明了一个类族派生类的共同接口,而接口的完整实现,即纯虚函数的函数体,要有派生类自己定义。抽象类派生出新的类之后,如果派生类给出所有纯虚函数的函数实现,这个派生类就可以定义自己的对象,因而不再是抽象类;反之,如果派生类没有给出全部纯虚函数的实现,这时的派生类仍然是一个抽象类。抽象类不能实例化,即不能定义一个抽象类的对象,但可以定义一个抽象类的指针和引用。通过指针和引用,就可以指向并访问派生类的对象,进而访问派生类的成员,这种访问是具有多态特征的。
class Base1{
public :
virtual void display()const=0;
};
class Base2:public Base1{
public:
void display()const;
};
void Base2::dispaly()const{
cout<<"Base2::display()"<<endl;
}
13、多态性
指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。
  a.编译时多态性:通过重载函数实现
  b 运行时多态性:通过虚函数实现。
14、内联函数
内联函数是指嵌入代码,就是在调用函数的地方不是跳转而是直接将代码写到那里。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值