c 到 c++ 过渡

[复制链接]
发表于 2026-1-1 01:04:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
c++根本入门
  1. #include <iostream>
  2. #include <cmath>
  3. #include <unistd.h>        // 总结:按照书写依次往下,先看 iostream 再看 cxxx 最后 xxx.h
  4. using namespace std;        // 本质:自定义作用域,作用域就在该命名空间内部。一个命名空间内部名字不重名就可以,不同命名空间可以相同
  5. int main()
  6. {
  7.     // 输出
  8.     cout << "abc" << 100 << endl;        // cerr << "abc";  不带缓冲区输出,无需换行缓冲
  9.    
  10.     // 输入
  11.     int n;
  12.     cin >> n >> m;        // endl 换行符
  13.    
  14.     return 0;
  15. }
  16. // std 看作班级,std::cout 就是告知某班某成员,避免反复书写,直接写在程序开头
复制代码
c++编译

g++ old_name -o new_name
字符串
  1. string 会自动分配扩大内存空间
  2.    
  3. // 空间扩展演示
  4. string s14;
  5. cin >> s14;        // 输入123456789
  6. cout << s14.capacity() << endl;        // 空间大小  15        默认空间大小就是15,若后续超出范围会自动扩展
  7. cout << s14.length() << endl;        // 实际大小  9
  8. // 输入
  9. sreint s;
  10. cin >> s;
  11. cout << s << endl;
  12.    
  13. // 赋值
  14. string s1 = "abcd";
  15. // 复制
  16. string s2;
  17. s2 = s1;
  18. // 拼接
  19. string s3;
  20. s3 = "xyz" + s1;
  21. s3 += "123";
  22. // 比对
  23. if(s1 ==  "abcd")
  24.     cout << s1 << "== abcd" << endl;
  25. if(s1 > "aBcd")
  26.     cout << "yes" << endl;        // 挨个按照 ascoll 码值来对比
  27. // 展示循环打印字符串
  28. string s[10] = "abcdef";
  29. for(int i = 0; i < s.length; i++)
  30. {
  31.     cout << s[i];
  32. }
  33. cout << endl;
  34. // 删除
  35. string s("");
  36. cout << s << endl;
  37. s.erase(4,5);        // 从第四个位置开始删除,删除5个索引
  38. cout << s << endl;
  39.   
  40. // 查找
  41. cout << s.find("all", 30, 100) << endl;        // 从下标索引30开始向后查找,一直查到100
  42. cout << s.find_last_of("So") << endl;        // 从后往前查询
  43. // 替换
  44. string s("123456789");
  45. cout << s.replace(5, 5, "A") << endl;        // 将下表为5的位置开始,替换后面5个为A
复制代码
引用

概念:给一个已有的对象(变量)取别名
  1. & 号放在定义语句当中就是取别名
  2. // 变量
  3. int a = 100;
  4. int &b = a;        // 让 a 的别名叫做 b
  5. // 数组
  6. int c[10] = {1,2,3};
  7. int (&d)[10] = c;
  8. // 指针
  9. int *p = &a;        // 此时是取地址,不同于取别名
  10. int *(&q) = p;
  11. 注意:
  12.     1、不可以给常量取引用,int &r = 100;  常量是匿名的
  13.     2、引用必须同时定义与赋值
  14.     3、相较于指针更加快速高效
  15. // 例如:交换两个数的值
  16. void swap(&a, &b)
  17. {
  18.     int temp;
  19.    
  20.     temp = a;
  21.     a = b;
  22.     b = temp;
  23. }
  24. int main()
  25. {
  26.     int a = 1, b = 2;
  27.    
  28.     swap(a, b);
  29.    
  30.     cout << a << b << endl;
  31.    
  32.     return 0;
  33. }
复制代码
函数默认参数
  1. void f(int a, float b = 3.14);
  2. void f(int a, float b)
  3. {
  4.     cout << a << endl;
  5.     cout << b << endl;
  6. }
  7. int main()
  8. {
  9.     f(100, 1.23);        // 显式的给 b 传递参数 1.23
  10.    
  11.     f(200);        // b 使用默认值,3.14
  12. }
  13. 注意:
  14.     1、为防止二义性,默认值参数只能位于最右边
  15.     2、声明指定默认值,定义不写默认值
复制代码
函数重载

本质就是同一个函数名有差别的版本。
函数重载时,调用函数是在编译期间就确定了具体的调用对象,因此将函数重载叫做静态联编
可以形成重载的环境(只要满足一个即可):
1、参数个数差别
2、参数范例差别
3、参数次序差别
3、类方法的const属性
4、平凡指针与常目标指针
  1. // 参数个数不同
  2. void f(int a);
  3. void f(int a, int b);
  4. // 参数类型不同
  5. void f(int a);
  6. void f(float b);
  7. // 参数顺序不同
  8. void f(int a, float b);
  9. void f(float a, int b);
  10. // 类方法的 const 属性
  11. class Node
  12. {
  13.     void f(int a);
  14.     void f(int a)const;
  15. };
  16. // 普通指针与常目标指针  查看匹配度
  17. void f(char *p);
  18. void f(const char *p);
复制代码
不可以形成重载的环境:
1、函数名、函数参数列表完全划一
2、函数返回值范例差异
3、静态函数声明(static)
4、const型变量(包罗常指针)
  1. // 函数名、函数参数列表完全一致
  2. void f(int a);
  3. void f(int a);
  4. // 函数返回值类型差异
  5. void f(int a);
  6. int f(int a);
  7. // 静态函数声明(static)
  8. void f(int a);
  9. static void f(int a);
  10. // const 型变量(包括常指针)
  11. void f(int *a);
  12. void f(int * const a);
复制代码
堆内存管理

new:分配堆内存
delete:开释堆内存
  1. int main()
  2. {
  3.     // 分配单个
  4.     int *p = new int;        // 要在堆内存开辟一块新的可以放下 int 类型的空间
  5.     *p1 = 666;
  6.     delete p1;
  7.    
  8.     // 分配多个
  9.     char *k = new char[1000];
  10.     for(int i = 0; i < 1000; i++)
  11.     {
  12.         k[i] = 666;
  13.     }
  14.     delete [] k;
  15.    
  16.     return 0;
  17. }
  18. 注意:
  19. 相比于 malloc 的区别:(delete 与 free类似于此)
  20.     1、new 会自动调用类的构造函数,而 malloc 不会;
复制代码
罗列循环
  1. int main()
  2. {
  3.     int a[] = {1,2,3,4,5};
  4.    
  5.     for(int i : a)        // 用 i 来依次取得数组内部数据
  6.     {
  7.         cout << i << endl;
  8.     }
  9.    
  10.     return 0;
  11. }
  12. int main()
  13. {
  14.     list<string> names;
  15.     names.push_back("1");
  16.     names.push_back("2");
  17.     names.push_back("3");
  18.    
  19.     for(string n : names)
  20.         cout << n << endl;        // 将名字全部打印出来,前面的类型对应后面需要打印的元素的类型
  21.    
  22.     return 0;
  23. }
  24. // 若是版本不支持则: g++ old_name -o new_name -std=c++11
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表