C++基础语法学习1

1.命名空间 namespace 

为什么要使用命名空间:一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。

::作用域限定符 用来限定变量的所属域

2.c++中可以使用 for(int i = 0; i <10; i++)循环,C语言中会语法报错,此时i不算被定义,之后不可使用

3.register关键字请求“编译器”将局部变量存储于寄存器中
                C语言中无法取得register变量地址
  
在C++中依然支持register关键字
             1、C++编译器有自己的优化方式,不使用register也可能做优化
             2、C++中可以取得register变量的地址
        C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。
 
C++中若对register变量取地址,则该变量不再是寄存器变量,系统自动为其分配地址,变为普通变量

4.未初始化的全局变量为0,为初始化的局部变量为垃圾值,C语言中可以对全局变量重复定义,C++中不可以对全局变量进行重复定义

5.结构体加强在c++中结构体相当于是一种数据类型,如struct Test{};,定义时可以写成Test t;
 

6.函数参数:C语言中print()可以接受任意个参数,print(void)没有参数

                       c++中,返回值必须要有类型,即函数必须有类型,形参有无void都一样,都不能传入参数

7.新增bool型,bool a = true a则为1,bool型的值只能是0或1

8.条件表达式:C语言中 :

int a = 1, b = 2;

int c = (a > b) ? a : b;

此时条件表达式的返回值是一个常量2,而不是b这个变量,所以条件表达式不能是左值,因为常量不能被赋值

可以通过 (a > b) ? &a : &b来返回一个地址来作为左值

c++中条件表达式可以作为左值,返回的是变量本身

9.c++中,const int a = 1, a是一个常量,存在与编译器的符号表中,不占用内存,

int *p = (int*)&a 操作系统则会分配四个字节来存放1,但是与a无关,a是一个常量,用1来替换

const与define的区别:两者作用域不同

const int a = 1  //a是一个局部变量,函数内部有效

#define b 1 //宏,代码从这一行向下都有效

10.c++中的引用

引用可以看作一个已定义变量的别名
引用的语法:Type& name = var;  
#include <stdio.h>
 
int main()
{
    // 定义一个int型变量a,在内存中占4个字节,
    // 变量名 a 就代表了这一块内存,或者说 a 是这块内存的别名
    int a = 10;
 
    // 定义了一个引用变量 b ,它是 a 的别名,和 a 代表同一块内存空间
    // 对 b 的操作 和 对 a 的操作是一样的
    int& b = a;
 
    // 改变 b 等于改变了 a
    b = 20;
 
    printf ("%d, %d\n", a, b);
 
    // a 与 b 代表同一块内存空间
    printf ("%p, %p\n", &a, &b);
 
    return 0;
}
普通引用在声明时必须用其它的变量进行初始化
 

普通引用一定要初始化,相当于给a这段内存取了别名叫b

11.int a[10] = {0}; a是一个常指针,不能改变,a++是不成立的

c++中 char &a;a为常指针,占4个字节

引用只能引用一次,即int &a = b后,不能出线对a的其他赋值

12.引用的意义

#include <stdio.h>
 
void swap1 (int &a, int &b)
{
    int tmp = a;
    a = b;
    b = tmp;
}
 
void swap2 (int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
 
int main()
{
    int a = 10;
    int b = 20;
 
    swap2 (&a, &b);
    swap1 (a, b);
    printf ("%d, %d\n", a, b);
 
    return 0;
}
1)引用作为其它变量的别名而存在,因此在一些场合可以代替指针
2)引用相对于指针来说具有更好的可读性和实用性
 

13.const

const int *p;  就近原则,const离*近,所以不能改变*p,及不能改变其值

int *const p;const离p近,p不能改变

const int* const p;两者都不能变

14.不能返回局部变量的引用,与返回局部变量的地址类似,函数运行结束后,参数空间都会被释放

15.常引用:

①不能用常量初始化引用(常量不占内存)

②const int &b = 1;常引用可用常量来初始化,系统分配4个字节,存入1,常引用不能修改

③可用变量初始化常引用

16.默认参数

一旦使用了默认参数,之后的参数必须使用默认参数,否则产生歧义

占位参数,留个位置,减少改动

int add(int x, int y, int = 0, int = 0)

17.函数重载

①参数个数不同

②参数类型不同

③参数顺序不同

返回值不能构成重载,重载函数遇到默认参数可能出现歧义

18.面向对象编程:抽象 封装 继承 多态

猜你喜欢

转载自blog.csdn.net/cb673335723/article/details/81109838