• C++ 01


    // 一个c++程序

    1. //#include
    2. //using namespace std;
    3. //int main()
    4. //{
    5. //    cout << "hello world" << endl;
    6. //    return 0;
    7. //}
    8. // using namespace std; 声明一个命名空间
    9. /*


     命名空间解决了多个模块间命名冲突的问题,例如c++库提供的对象都存放
      在了std这个标准名字空间中,例如cin,cout,endl
    */
    // 第二种使用域限定符::

    1. //#include
    2. //int main()
    3. //{
    4. //    std::cout << "hello world" << std::endl;
    5. //    return 0;
    6. //}


    // 第三种使用using和域限定符一起

    1. //#include
    2. //using std::cout;
    3. //using std::endl;
    4. //int main()
    5. //{
    6. //    cout << "hello world" << endl;
    7. //    return 0;
    8. //}

    // 标准库iostream中的cin和cout 起输入输出作用
    // 输出操作符: <<
    // endl起换行作用 例如: cout<<"hello"< // 输入之前定义类型一致的变量来存放数据例如:
    // int a, b;
    // cin >> a >> b;


     c++ 数据类型: char int float double bool
     与c语言不同的是使用cin 和 cout 时不需要手动控制数据类型
     

    1. //#include
    2. //using namespace std;
    3. //int main()
    4. //{
    5. //    bool a = true;
    6. //    bool b = false;
    7. //    cout << a << b;
    8. //    return 0;
    9. //}

    // 函数的重载

    1. #include
    2. using namespace std;
    3. // 方法1
    4. int add(int a, int b) {
    5. cout << "方法1" << endl;
    6. return a + b;
    7. }
    8. // 方法2
    9. double add(double a, double b) {
    10. cout << "方法二" << endl;
    11. return a + b;
    12. }
    13. // 方法三
    14. double add(double a, int b) {
    15. cout << "方法三" << endl;
    16. return a + b;
    17. }
    18. int main()
    19. {
    20. cout << add(1,2) << endl;
    21. return 0;
    22. }

    函数模板:

    1. #include
    2. using namespace std;
    3. // 定义函数模板
    4. template<class T1,class T2>
    5. T1 add(T1 x, T2 y)
    6. {
    7. cout << sizeof(T1) << "," << sizeof(T2) << "\t";
    8. return x + y;
    9. }
    10. int main()
    11. {
    12. cout << add(10, 20) << endl;
    13. }

    / inline 内联函数, 解决一个函数代码不多却频繁被调用的问题
    // 依然使用自定义函数,但是在编译的时候,把函数代码插入到函数调用处,免去函数调用的一系列过程,像普通顺序执行的代码一样

    1. #include
    2. using namespace std;
    3. inline int Max(int a, int b) {
    4. return a > b ? a : b;
    5. }
    6. int main()
    7. {
    8. cout << Max(1, 2) << endl;
    9. return 0;
    10. }

    内联函数的定义要在调用之前出现,才可以让编译器在编译期间了解上下文,进行代码替换。除此以外,内联函数register变量类似,仅仅是我们提给编译器的一个请求,最终是否真正会实现内联,由编译器根据情况自行选择。


     c++字符串:
      字符数组 
      string 类类型
      字符数组: 使用null字符\0 终止的以为字符数组
      操作字符数组的一些方法:
      strcpy(s1,s2); 复制s2到s1
      strcat(s1,s2); 连接s2到s1的末尾
      strlen(s1); 返回s1的长度
      strcmp(s1,s2); 如果s1和s2相同返回0,大于s2返回正数,小于返回负数
      strchr(s1,ch); 返回一个指针,指向s1中字符ch第一次出现的位置
      strstr(s1,s2);返回一个指针,指向字符串s2第一次出现的位置

     访问权限: public private pritected

     与普通变量一样,对象也是一片连续的内存空间,对象指针存储这个对象的地址
     除了在赋值、访问成员的时候用以外,在传参的时候也建议用指针来传递,因为其传递的为地址,不会进行对象之间的副本赋值,从而减少内存的开销,提高效率

     对象引用就是一个类对象起个别名,本质上也是把这个类对象的地址赋给了这个引用类型,两者指向一块内存空间,不会调用构造函数
     引用类型存的还是地址,传参定义都不会太多内存开销,有指针的优势

     析构函数(destructor):用做对象释放后的清理善后工作
     不能重载,可以是虚函数

    1. // 类
    2. #include
    3. using namespace std;
    4. class Student
    5. {
    6. public:
    7. string name;
    8. int age;
    9. int print()
    10. {
    11. cout << name << endl;
    12. return 0;
    13. }
    14. int look(); // 类内声明
    15. // 构造方法
    16. Student(string name, int age);
    17. Student();
    18. //析构函数
    19. ~Student();
    20. };
    21. // 类外定义
    22. int Student::look() {
    23. return 0;
    24. }
    25. Student::Student(string name, int age) {
    26. this->name = name;
    27. this->age = age;
    28. }
    29. Student::~Student() {
    30. cout << "destructor" << endl;
    31. }
    32. int main()
    33. {
    34. // 创建对象
    35. Student liHua;
    36. liHua.age = 20;
    37. liHua.name = "lihua";
    38. liHua.print();
    39. // 对象指针
    40. Student* p;
    41. p = &liHua;
    42. p->print();
    43. return 0;
    44. //对象的引用
    45. Student& A = liHua;
    46. A.print();
    47. }

    深拷贝与浅拷贝:
     浅拷贝; 把原有对象中的成员依次拷贝给新对象中对应的成员
     但是当成员变量中有指针成员的时候,浅拷贝不会给新的对象的指针成员开辟内存空间,两个指针指向一块堆内存,那么释放这块内存的时候,两个对象调用两次,delete两次就会出现错误
     深拷贝:定义拷贝函数 在实现中开辟内存

  • 相关阅读:
    “/home/test/cc/bk-server/docker-compose.yml“ docker配置
    R数据分析:样本量计算的底层逻辑与实操,pwr包
    MySQL的高可用方案:深入Galera Cluster和ProxySQL
    29栈与队列——优先队列
    【java学习—八】==操作符与equals方法(2)
    Hbuilderx Eslint配置
    Leetcode 151:反转字符串中的单词
    springboot中如何集成logback呢?
    区块链技术助力数字碳中和的路径研究
    OpenMesh 网格顶点Quadric误差计算
  • 原文地址:https://blog.csdn.net/qq_56951318/article/details/127440003