C++基础笔记01

强类型语言,类型检查严格
支持面向对象,泛型,异常(打游戏可不能异常),运算符重载

C++文件后缀可以是 .cpp,.cc,.c等

//includeC++本身的头文件时 使用<不加.h>
#include 
//C 的头文件  可以加.h  但是C++不推荐
#include 
//推荐 使用C++重写的头文件 把.h去掉 在前面加c
#include 
//如果要 include 我们自己写的头文件时 使用 "" 加.h
#include "MyClass.h"

cout的是一个对象 通过<<输出运算符 进行输出 可以连续输出,endl是换行。
cin/cout代替 scanf,cout
std是命名空间,::是域运算符

std::cout << "Hello, World!\n" << 123213 << 3.4324 << 'a'<< std::endl;
std::cin >> x;
//  相当于std::cin.operator>>(x);对象调方法,可省,略写如上

命名空间

//使用指令后的所有std命名空间下的东西 访问时都可以不用在加 std了
using namespace std;
//变量和函数
namespace Hero {
    const char *name = "英雄";
    void show() {
        std::cout << "英雄出现了" << std::endl;
    }
}
//命名空间可以分开写
namespace Hero {
    int a = 200;
}
//使用声明
using std::cout;

//C++会把所用东西都放在命名空间下,如果我们自己没有写命名空间,默认放在一个没有名字的命名空间下
    cout << ::name << endl;

结构

//可以放函数
struct Date {
    int year;
    int month;
    int day;
    void show() {
        cout << year << "-" << month << "-" << day << endl;
    }
};

联合就是在内存中都占同一片地址

union MyUnion {
    int x;
    int y;
    double d;
    char cs[4];
};
//可以有匿名联合
union {
    int x;
    int y;
};

枚举:不再只是普通的int

//注意用枚举提高代码可读性
enum HeroState{
    Stand,
    Move,
    Attack,
    Die
};

C++中bool是数据类型,本质也是int,c中是宏定义

运算符可以用其他奇怪的关键字替换

注意值传递和地址传递

C++的参数默认值 必须从右向左给 右边的参数有了默认值左边的参数才可以给默认值

内联函数

//inline 内联函数 执行效率要比普通的函数高
//内联函数执行的时候不会在栈中开辟空间,而是直接把内容拷贝到得调用的方法中
//inline只是向编译器发送请求,希望成为内联函数,编译器会做检查,如果内容少,逻辑简单就会同意申请,如果拒绝了,这个函数调用还和普通函数一样,  同常情况下,如果是个递归函数,肯定会拒绝
inline void print(int x) {
    int a = 200;
    int b = 300;
    cout << x + a + b << endl;
}

哑元函数

//冲突时多一个参数,没有参数名,这样就是哑元
void print(int x, int) {
    cout << x << endl;
}

int &r = x;
引用实际是别名,反正r就是x,都是同一个东西,地址都一样。其实写成
int& r=x;更好理解
r是个int类型的引用。
引用是一辈子的,不可以改地址了

  // 声明引用必须初始化
//如果要引用一个常量 必须使用常引用
    const int &r3 = 500;
//    r3 = 500;

弄清值传递x=y、地址传递 int* p、引用传递&x=y
*是寻址运算符也是指针
&是取地址符也是引用

交换两数的多种方法swap

//交换:用引用
void swap(int &x, int &y) {
    cout << x << ' ' << y << endl;
    int t = x;
    x = y;
    y = t;
    cout << x << ' ' << y << endl;
}

//交换  两数交换不使用第三个变量
void swap2(int &x, int &y) {
    x = x + y;
    y = x - y;
    x = x - y;
}

//按位异或交换 不使用第三个变量
void swap3(int &x, int &y) {
    x = x ^ y;
    y = x ^ y;
    x = x ^ y;
}

//永远不要返回局部变量的引用

int& fc() {
    int x = 100;
    return x; 
}

// static_cast<类型>()
// 转换时做静态检查,即在编译时进行
// void*到其他指针的转换

double d = 3.1415926;
// int x = d; //隐式类型转换
 int x = static_cast(d);
//    reinterprect_cast<类型>()
//    允许强转任何类型的指针
//    把整数强转成指针,指针强转成整数
 double *pd = reinterpret_cast(pl);
//    const_cast<类型>()
//    去掉cv限制
 volatile const int a = 100;//值已改但编译器自作聪明,volatile 易挥发的
提醒编译器还是再去内存中取值了。
 int *pa = const_cast(&a); //const int *
 *pa = 200;

//获取成员变量地址用 Struct::
&Date::year;
this指针,隐式地传入当前对象

你可能感兴趣的:(C++基础笔记01)