C++入门基础笔记

C++基础

1. 输出hello world

#include <stdio.h>
using namespace std;
int main(){
    cout << "Hello World" << endl;
    return 0;
}

2. ::双冒号作用域运算符

2.1 全局作用域 直接加::

3. namespace 命名空间

3.1 用途 解决名称冲突问题

3.2 必须在全局作用于下

3.3 命名空间下可以放入 函数、变量、结构体、类

3.4 命名空间可以嵌套命名空间

namespace A {
    void func();
    int m_A = 20;;
    struct Person {

    };
    class Animal {};
    namespace B {
        int m_A = 10;
    }

}



3.5 命名空间是开放的,可以随时加入新的成员

```cpp
namespace A{
    int m_B = 1000;
}

3.6 匿名命名空间 相当于static int m_c 只能在当前文件内使用,就是静态变量

namespace{
    int m_C = 0;
    int m_D = 0;
}

3.7 命名空间可以起别名

namespace shortName = longName;

4.using声明和using编译指令

4.1 using声明

如果局部范围内还有 sunwukongId 会出现二义性问题,要注意避免

namespace KingGlary {
    int sunwukongId = 10;
}

void test01() {
    int sunwukongId = 20;

    //using 声明 注意避免二义性问题
    //写了using声明后 下面这行代码说明以后看到的sunwukongId是用KingGlory下的
    //但是 编译器又有就近原则
    //这时候就出现了二义性
    using KingGlary::sunwukongId;
    cout << sunwukongId << endl;
}

4.2 using编译指令

namespace LOL {
    int sunwukongId = 30;
}
void test02() {
    //int sunwukongId = 20;
    //using 编译指令
    using namespace KingGlary;//打开房间 具体用
                                //没用看自己 就近原则>打开房间
    using namespace LOL;//打开LOL房间
    //如果打开多个房间,也要避免二义性问题
    cout << LOL::sunwukongId << endl;
}

5.C++对C语言的增强

5.1 全局变量检测增强

5.1.1在c语言中,定义一个变量之后再对该变量进行定义是可以通过检测的
int a;
int a = 10;
5.1.2在c++中上述定义是不被允许的
//int a;
int a = 10;

5.2 函数检测增强,参数类型增强,返回值检测增强

C语言

5.2.1、函数定义时形参类型可以不定义
5.2.2、调用函数时可以多写实参
5.2.3、定义int函数可以不用写return
int getRectS(w, h) {

}
void test02() {
    getRectS(10,10,10);
}
5.2.4在C++ 中,参数类型增强,返回值检测增强,函数调用参数检测增强
int getRectS(int w,int h) {
    return w * h;
}
void test02() {
    getRectS(10, 10);
} 

5.3 类型转换检测增强,必须强制类型转换

5.3.1在c语言中,类型转换界限模糊,c可以不用强转
void test03() {
    char* p = malloc(sizeof(64));//malloc返回值是void *
}
5.3.2在c++中,必须强制类型转换
void test03() {
    char* p = (char *)malloc(sizeof(64));//malloc返回值是void *
}

5.4 struct增强

struct Person {
    int m_Age;
    //void plusAge(); //c语言中struct不可以加函数
};

void test04() {
    struct Person p1;//c语言中使用的时候必须加入struct关键字
}
struct Person {
    int m_Age;
    void plusAge() {
        m_Age++;
    }; //c++语言中struct可以加函数
};

void test04() {
    Person p1;//c++语言中可以不加struct关键字
    p1.m_Age = 10;
    p1.plusAge();
    cout << p1.m_Age << endl;
}

5.5 bool类型增强(c++中会有bool类型)

c语言中没有bool类型

c++中增加了bool类型

sizeof为1

bool flag = true;

5.6 三目运算符增强

5.6.1 c语言中三目运算符最后返回的是值
int a = 10;
int b = 20;
printf("ret = %d",a>b?a:b);
//a > b ? a : b = 100;  c语言返回的是值,这种方法不可取 不能 20 = 100
5.6.2 c++中三目运算符返回的是变量
int a = 10;
int b = 20;


a > b ? a : b = 100; //返回的是b = 100
(b > a ? b : a) = 100; //加括号b=100 赋值成功, 不加括号,直接返回b

5.7 const(常量)增强

c语言中,const修饰的变量是伪常量,编译器是会分配内存的

c++中,const不会分配内存 const int m_B = 2 c++会分配符号表
在这里插入图片描述

int *p = (int *)&m_B;
*p = 200;
//此时编译器会分配一个临时的空间
// 相当于 int temp = m_B  temp是有内存的
// int *p = (int *) &temp *p指向的是临时的那块儿空间 临时空间是看不到的

c语言中 const int m_A = 10; 是受到保护的 不可以更改的

但是通过一些手段可以修改声明只读的值

5.8 const是否是内部链接

在c语言中,const默认是外部链接,只需要声明extern const int a 外部文件就可以用const int a

在c++中,const默认是内部链接,在主文件声明extern const int a 时,外部文件也必须用extern const int a ,如果想使用,必须用extern提高作用域

5.9 const内存分布情况

5.9.1 const分配内存,取地址会分配临时内存
const int m_A = 10; //不会分配内存,会把值直接放入符号表中
int *p = (int *)&m_A; //会分配临时内存
5.9.2 extern声明,编译器也会给const变量分配内存
5.9.3 用普通变量初始化const的变量
int a = 10;
const int m_A = a;//只要分配内存的变量都会修改值


int *p = (int*)&m_A;
*p = 1000;
5.9.4 自定义数据类型加const也会分配内存
struct Person{
    string m_Name = "";
    int m_Age = 10;
}
void test(){
    const Person p1;
    p1.m_Age = 11;//const 不分配内存不允许修改
    //只要能分配内存的就可以绕过编译器就该其内容
    Person *p = (Person*)&p1;
    

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值