c/c++补充_2

1.引用是一个常指针
const int a =100; const int &b = a; //相当于 const int* const b =a;
// int tmp = a;因为a是一个常量,需要创建一个临时的变量来存放值,再通过临时的变量给引用赋值。这样做是因为防止以后如果有 int* p=(int)&b,来改变了常量a的值。但是如果a不是常量则没有创建临时变量。
// const int &b = a;
2.const &a = 10.2; const a相当于const int a;
a=????
解释:a的值是10,因为在c++默认的情况下,编译器会把当成int型来处理。
3.全局变量:
(1)初始化全局变量
(2)未初始化全局变量,默认为零
(3)常量区
(4)静态区
4.在代码中出现的比如10、29、3等int型的数字,都是字面常量,没有地址
5.在函数的调用上,fun(const &a),参数中的const有两个作用:
(1)防止通过a来改变a引用的值 
(2)使a的引用能力增强了。比如:它可以引用const类型的,也可以引用非const类型的!因为不加const的话,只能引用非const类型的数据.!!!
注意这种引用的方式效率低,因为在函数用到a是会解引用,这样会增加程序运行的次数。如果可以就直接用传值的方式来调用函数。!!
6.引用指针的时候:
int * p=NULL;
int& a=p;
7.关于编译器解释函数原型:
比如函数 int fun(int a, int b);
函数的原型就是:int+fun+int,int
c语言:_fun
c++语言:?+fun(函数名字)+@@YA(调用方式)+H(返回值的类型)+H(第一个参数)+H(第二个参数)+@z(...)
注意:不能用返回值来区分重载函数是因为二义性,函数表中的函数原型是不一样的,但是因为执行时因为二义性不知道要执行那个函数,而无法实现重载,所以不能用返回值来区分函数的重载。
8.extern"c"
{
   //code;
}:用c语言方式编译。
extern"c++"
{
  //code;
}:用c++语言方式编译。


extern"c++":
9.什么叫早起绑定,什么叫晚绑定。
10.对于内存的分配有三种方式,但是他们有各自存在的理由:
(1)int *p = (int *)malloc(sizeof(int));
(2)int *p = new int(10);
(3)int *r = (int*)::operator new(sizeof(int))->分配一个int大小的空内存。用来完成new不能为自定义类型(比如类)分配空内存缺陷。
   operator delete(r)->释放内存
   new(r) int(10)->对开辟的空间进行赋值
区别:
      (1)的分配方式没有初始值,如果分配失败则返回NULL,用free()来释放内存
      (2)的分配方式如果分配失败,则返回异常bad_malloc。用delete来释放内存
      (3)的分配方式弥补了(2)再分配自定义类型上的不足,如果new来分配一个自定义类型的累的话代码new Test[maxsize]分配的是一个放有maxsize个Test实例对象的数组,编译器会调用maxsize次Test的构造函数来创建maxsize个对象,而我们要的是一个空内存不需要带有对象的内存。new关键字只是适合分配内置类型的空内存,对于自定义类型(比如类)有时则不可以达到预期效果。
注意:malloc()分配的内置类型的空间可以进行操作
class text
{
  int value;
  print()
 {
   cout<<"abc"<<endl;
  }
  printf()
 {
   cout<<value<<endl;
 }
}
text *p=NULL;
p->print();//不报错,这是因为函数运行起来text类的this指针接受p的NULL,虽然为空但是打印abc的时候,编译器没有把this指针加在"abc"的前面,不会访问空指针,所以不会报错。
p->printf();//报错,这是因为类会在要访问的value前加一个this指针,当要打印value的值的时候,需要访问this指针,但是this接受了函数printf()的this指针的值(来源于p),所以,访问了空指针,所以会报错。
11.虚函数会有一个虚表指针来实现多态。虚表在类对象赋值是不能赋值。
12.编译器对类的编译步骤是什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值