c++复习

类也可以写在命名空间内部。
C语言中的const修饰的变量可以用指针来修改,c++不行(类似于define的宏替换,宏替换在预处理阶段const在编译阶段)

C和C++中全局 const 变量的作用域相同,都是当前文件,不同的是它们的可见范围:C语言中 const 全局变量的可见范围是整个程序,在其他文件中使用 extern 声明后就可以使用;而C++中 const 全局变量的可见范围仅限于当前文件,在其他文件中不可见,所以它可以定义在头文件中,多次引入后也不会出错。

new和delete会自动调用构造和析构函数

内联函数,定义处加inline(可以在头文件中定义,普通函数不允许,尽量直接在头文件中定义)

函数的默认参数(在给定的作用域中,只允许指定一次默认参数,并在当前作用域使用当前默认参数)

函数重载返回值不能作为重载条件,其本质是根据函数名,形参列表,构成的不同函数`

函数重载,当不能精确匹配时发生类型转换,如出现二义性则报错。

类只是一个模板,并不会占用内存空间,只有在实体化以后才会分配内存。

成员函数在类中定义和类外定义的区别:

在类中定义的成员函数会自动成为内联函数,实际开发以类外定义为主

对象的内存模型

成员变量和成员函数分开存储,成员函数只会存储一份。同样存在内存对齐,按照成员对象的声明顺序。
成员函数最终会被编译成全局函数。如何访问成员对象?
在编译的时候会为成员函数添加一个参数,类指针。这样就可以通过指针来访问成员对象了。

本质不是通过对象去找函数而是通过函数去找对象。

构造函数必须是 public 属性的,否则创建对象时无法调用。

调用没有参数的构造函数也可以省略括号。

对于const类型的成员变量必须使用初始化列表进行初始化。

成员对象,先构造后析构。

this指针:
本质是成员函数的一个形参,在调用成员函数的时候,将对象的地址作为实参传递给this(this和对象的地址是一样的)

静态成员变量(static),必须在类声明的外部初始化,初始化时不用加static,但要有数据类型和类名。和普通的静态变量一样在全局数据区开辟空间(所有其不会占用对象的内存,即使不创建对象也可以访问),只能被初始化一次,必须初始化(静态变量可以不,默认为0)。
既可以用对象来访问也可以用类来访问。(和普通的成员变量一样,外部只能访问public)

静态成员函数(只能访问静态成员,类似于普通的全局函数,不会为其添加this指针)

const成员函数,在声明和定义的时候在 函数的尾部加上const(禁止函数修改数据)

const修饰对象(常对象),只能调用const成员变量和const成员函数。

友元函数

  1. 将非成员函数声明为友元函数。不会添加this指针,参数需是对象或对象指针。
  2. 将其他类的成员函数声明为友元函数

友元类:可以访问其友元的全部成员,包括成员函数和成员变量。friend写入被访问类的内部(类自己记录可以访问他的朋友)

class和stuct区别:
1.class默认是private struct默认是public
2.classl可以包含函数 struct也可以(c语言中不行)
3.class可以使用模板

引用,从一而终,别名。本质,指针,系统帮我们解引用。

函数的返回值如果是引用,注意不能反回局部数据(临时数据)。

什么样的临时数据会放到寄存器中?
较小的临时数据如:int double bool char 一般不会超过8个字节。
而对象,结构体这些临时数据的大小不可预测,一般会存放到内存中。

编译会为const引用创建临时变量。
编译器会为临时数据创建一个新的、无名的临时变量,并将临时数据放入该临时变量中,然后再将引用绑定到该临时变量。注意,临时变量也是变量,所有的变量都会被分配内存。

typedef struct{
    int a;
    int b;
} S;
int func_int(){
    int n = 100;
    return n;
}
S func_s(){
    S a;
    a.a = 100;
    a.b = 200;
    return a;
}
S operator+(const S &A, const S &B){
    S C;
    C.a = A.a + B.a;
    C.b = A.b + B.b;
    return C;
}
int main(){
    int m = 100, n = 36;
    const int &r1 = m + n;
    const int &r2 = m + 28;
    const int &r3 = 12 * 3;
    const int &r4 = 50;
    const int &r5 = func_int();
    S s1 = {23, 45};
    S s2 = {90, 75};
    const S &r6 = func_s();
    const S &r7 = s1 + s2;
    return 0;
}

临时变量本身就是不允许修改的,这恰好与const吻合。

const 引用与类型转换
给引用添加 const 限定后,不但可以将引用绑定到临时数据,还可以将引用绑定到类型相近的数据,

float f = 12.45;
const int &r = f;
printf("%d", r);

1.避免数据篡改
2.让const函数可以接受const和非const参数
3.可以使用临时变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值