C++学习day1

153 阅读2分钟

C++ Primer Plus

第一章 预备知识

C++的编程方式

  • 过程性

  • 对象

    试图将一些特定的有关联的操作进行封装,形成特定的类型,执行的时候去操作它内部的成员函数。 这使得C++在处理数据的时候方便,而且很简洁,要相信封装类的人。

  • 泛型

C++的IDE

  • 当然得是Visual studio啊

第二章 开始学习C++

main()函数

C++淘汰的写法: main() 经典写法: int main()

C++注释

C++注释以 // 为主 /**/这种方式其实是C语言的

换行

cout<<endl cout<<"\n" 实际上的区别就在于,endl能保证刷新,而\n则不行

cout和printf()

cout和printf比起来更加的智能和可操作性,可以重载<<针对特殊的类型的输出很友好。

第三章 处理数据

简单变量

  • 变量名

    只能使用字母,数字和下划线 第一个字符不能是数字 区分大小写 也不能是关键字 命名方式推荐用驼峰形式

  • 整型(limits.h/climits)

    short,int,long和long long 位与字节 位(bit),字节(byte)通常指的是8位的内存单元

  • 无符号类型unsigned

  • 选择整型类型

    通常,int类型被称为计算机而言最为“自然”的长度。自然长度:也就是计算机处理起来效率最高的长度。

  • 字面值表示

    cout<<hex; cout<<oct; cout<<dec;

  • char类型:字符和小整数

    cout<<和cout.put()的比较 cout<< ‘$’只会输出ASCII表对应的值 cout.put()则会输出字符 wchar_t宽字符类型 wchar_t bob = L'p'; 实际上还有char16_t,char32_t,以满足ISO10646标准

  • bool类型

    true和fault

const限定符

const类型最好在声明中就赋值 const的默认空间为当前文件中

浮点数:float,double,long double(cfloat/float.h)

C++算数运算符

  • cout.setf(ios_base::fixed,ios_base::floatfield)设置输出格式

  • 类型转换

    强制类型转换:(long)value;static_cast(value)

  • auto:处理复杂类型的时候才会体现优势

第四章 复合类型

数组typeName arrayName[arraySize]

  • 数组的初始化规则

    int cards[4] = {1,2};//未写全的默认为0 int number[4]; cards = number;//不可行的! int car[100] {1,2,3,4,5};//C++的风格

字符串 '\0' 结尾的字符数组

  • visual studio 2019默认的为 -52

  • cout<<"123"<<"5678"//此时第一个字符串的'\0'被第二个字符串的首字符替代

  • string.h(cstring)

    char name[MAX]; cin>>name;//此时只能读取一个单词 cin的高级用法在后面学习 读取一行字符串输入

    getline()//读取换行符
    cin.getline(name,10);//会把换行符替换成'\0'
    get()		//保留换行符在输入缓冲区中
    假如有两个连续的get(),则第二个只能读取第一个留在缓冲区中的换行符
    std::cin.get(name,10).get();
    

    注意的是:cin在输入数字的时候会把换行符留在缓冲区中 sizeof(char const *)//返回结束符号前的元素个数

string类简介

string类和char字符串不同,可以直接通过 + 号去连接两个字符串。 string类的其它操作: 读取大小str1.size(); 输入字符串getline(std::cin, name);//此时并不是cin.getline() 其它形式的字符串 wchar_t str[] = L"hello" char16_t str[] = u"hello" char32_t str[] = U"hello" cout<<R"(这里的内容无需转义字符也可输出符号)"<<'\n;

结构体介绍

假设需要用多种变量去描述一个对象则需要结构体。

  • 一般格式

    struct StudentSo
    {
    	int number;
    	float tall;
    };
    
  • 另起别名

    struct StudentSo
    {
    	int number;
    	float tall;
    };
    typedef  struct StudentSo STU;
    
  • 无名格式

    struct {
    	int n;
    	...
    }student;
    
  • 结构体数组

    单个赋值: name {1,2,"Hello"}; 多个赋值: name{{1,2,"hello"},{3,4,"jjeck"}};

  • 结构体的位字段

    struct torgle_register
    {
    	unsigned int SN:4;	//SN使用了4bit
    	unsigned int :4;	//未使用
    	bool goodIn :1;
    	bool goodTorgle:1;
    };
    

共用体

union one4all
{
	int int_val;
	long long_val;
	double double_val;
};

一般和结构体一起用:

union ID
{
	char n[20];
	struct MyStruct1
	{
		int a;
		int b;
		int c;
	}MY1;
};

枚举

enum spectrum{red,orange,yellow,green,blue,violet,indigo,ultraviolet};

默认是从0开始的。而且只能是整数

指针和自由存储空间

  • 指针的危险

    long *fellow;
    *fellow = 233333;//error 指针不知道在哪里存储233333
    
  • 指针和数字

    int *pt;
    pt = 0xB8000000;//强制指针指向0xB8000000 嵌入式用的多
    
  • 使用new

    c语言中可以使用 malloc 分配内存 c++也可以使用它或者new

    int *p = new int;
    double* pd = new double;
    

    公式如下:

    typename * pointer_name = new typeName;
    
    • 使用new创建数组

      int *p = new int[10]
      ...
      delete [] p;
      
  • 使用delete释放缓存

    int *ps = new int;
    ...
    delete ps;
    

指针、数组和指针算术

多维数组和指针的转换技巧 从左到右进行拆分即可: 1、p[1][2] 2、(p+1)[2] 3、(*(p+1)+2) 多维数组以此类推

  • 自动存储

    像局部变量,作用域就是包含它的代码。

  • 静态存储

    static 关键字: static double fee = 56.50

  • 动态存储

    new 和 delete

数组的替代品

  • vector

    #include <vector>
    vector<int> vi(lem);//lem是元素数量,如果不写默认为0
    
  • array

    #include <array>
    array<int,5> ai;