首页 > 编程语言 >C++ 对C的扩展有哪些

C++ 对C的扩展有哪些

时间:2024-10-03 22:44:29浏览次数:6  
标签:std const 函数 哪些 int 扩展 C++ cout

C++对C的扩展主要体现在以下几个方面:

  1. 语法增强
    • 变量声明位置更灵活:在C语言中,函数内的所有局部变量必须在函数开头的块内进行声明。而C++放松了这一限制,可以在函数内的任何位置声明变量,只要在使用该变量之前进行声明即可。例如:
    void someFunction() {
        // C++中可以在循环内部声明变量
        for (int i = 0; i < 10; i++) {
            // 这里的 i 是在循环内部声明的局部变量
            std::cout << i << std::endl;
        }
    }
    
    • 支持默认参数:C++允许为函数的参数指定默认值。在调用函数时,如果没有提供相应的参数值,则使用默认值。这使得函数调用更加灵活和方便。例如:
    void printMessage(std::string message = "Hello, World!") {
        std::cout << message << std::endl;
    }
    
    int main() {
        // 调用函数时使用默认参数
        printMessage();
        // 也可以传入自己的参数
        printMessage("This is a custom message.");
        return 0;
    }
    
  2. 数据类型扩展与增强
    • 新增bool类型:C语言中没有专门的布尔类型,通常用整数来表示逻辑值(0 表示假,非 0 表示真)。C++引入了bool类型,取值为true(表示真)和false(表示假),使逻辑表达更加清晰和直观。例如:
    bool isTrue = true;
    bool isFalse = false;
    
    • const的增强:在C语言中,const关键字的作用主要是限制变量的值不能被修改,但在复杂的表达式中,其语义可能不太明确。C++中的const更加强大,可以用于修饰函数的参数、返回值以及成员函数等,提供更好的常量性保证和代码的安全性。例如:
    void someFunction(const int parameter) {
        // 在函数内部无法修改 parameter 的值
    }
    
  3. 面向对象特性
    • 类和对象:这是C++最重要的扩展之一。C++支持面向对象编程,允许定义类来封装数据和操作。类可以包含成员变量(数据)和成员函数(操作),通过类可以创建对象,实现数据的隐藏和封装、继承、多态等面向对象的特性。例如:
    class Rectangle {
    private:
        int width;
        int height;
    public:
        Rectangle(int w, int h) : width(w), height(h) {}
        int getArea() const {
            return width * height;
        }
    };
    
    int main() {
        Rectangle rect(5, 10);
        std::cout << "Area: " << rect.getArea() << std::endl;
        return 0;
    }
    
    • 运算符重载:C++允许用户自定义运算符的行为,以便对自定义类型的对象进行操作。通过运算符重载,可以使代码更加简洁和直观。例如,可以为自定义的类重载+-*/等运算符。
    class Complex {
    private:
        double real;
        double imag;
    public:
        Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
        // 重载 + 运算符
        Complex operator+(const Complex& other) const {
            return Complex(real + other.real, imag + other.imag);
        }
    };
    
  4. 输入输出流
    • C++提供了更强大、更灵活的输入输出流(iostream库)来替代C语言中的printfscanf函数。输入输出流使用<<>>运算符进行操作,支持各种数据类型的输入和输出,并且具有更好的类型安全性和可扩展性。例如:
    #include <iostream>
    
    int main() {
        int num;
        std::cout << "Enter a number: ";
        std::cin >> num;
        std::cout << "You entered: " << num << std::endl;
        return 0;
    }
    
  5. 命名空间:在大型项目中,可能会出现命名冲突的问题。C++引入了命名空间的概念,可以将代码封装在不同的命名空间中,避免命名冲突。命名空间还可以嵌套使用,并且可以随时向已有的命名空间中添加新的成员。例如:
    namespace namespace1 {
        int variable = 10;
        void function() {
            std::cout << "This is function in namespace1" << std::endl;
        }
    }
    
    namespace namespace2 {
        int variable = 20;
        void function() {
            std::cout << "This is function in namespace2" << std::endl;
        }
    }
    
  6. 异常处理:C++提供了异常处理机制,用于处理程序运行时可能出现的错误和异常情况。通过try-catch语句块,可以捕获和处理异常,使程序更加健壮和可靠。例如:
    int divide(int a, int b) {
        if (b == 0) {
            throw "Division by zero error!";
        }
        return a / b;
    }
    
    int main() {
        try {
            int result = divide(10, 0);
            std::cout << "Result: " << result << std::endl;
        } catch (const char* errorMessage) {
            std::cerr << "Error: " << errorMessage << std::endl;
        }
        return 0;
    }
    
  7. 模板:模板是C++的一种高级特性,包括函数模板和类模板。函数模板可以根据不同的参数类型自动生成相应的函数版本,类模板可以根据不同的类型参数创建不同的类实例。模板提高了代码的复用性和可扩展性。例如:
    // 函数模板
    template <typename T>
    T maximum(T a, T b) {
        return (a > b)? a : b;
    }
    
    // 类模板
    template <typename T>
    class Stack {
    private:
        T* data;
        int size;
    public:
        Stack() : size(0) {
            data = new T[10];
        }
        ~Stack() {
            delete[] data;
        }
        void push(T value) {
            data[size++] = value;
        }
        T pop() {
            return data[--size];
        }
    };
    
  8. 增强的结构体:在C++中,结构体不仅可以包含成员变量,还可以包含成员函数,这使得结构体的功能更加强大,可以像类一样进行封装和操作。例如:
    struct Point {
        int x;
        int y;
        // 结构体内部的成员函数
        void print() const {
            std::cout << "(" << x << ", " << y << ")" << std::endl;
        }
    };
    

标签:std,const,函数,哪些,int,扩展,C++,cout
From: https://www.cnblogs.com/androidsuperman/p/18446101

相关文章

  • 【股市前瞻】10月“金股”大揭秘:宁德时代独领风骚,还有哪些黑马股将脱颖而出?
    随着9月牛市的余温未散,投资者们纷纷将目光投向即将到来的10月股市。在这个关键时刻,券商机构发布的金股组合无疑成为了市场关注的焦点。据wind数据显示,目前已有10余家券商发布了10月金股名单,涵盖了非银金融、新能源、医药、半导体等多个热门领域。在这些备受瞩目的个股中,宁德时......
  • C++之operator(附加返回引用的一些内容)
    在C++中,操作符重载允许你为自定义类型定义操作符的行为,使其可以像内置类型一样使用。通过定义operator函数,你可以指定操作符如何处理对象。基本语法ReturnTypeoperatorOp(Parameters){//实现}示例加法操作符重载#include<iostream>classPoint{public......
  • C++ 容器适配器
    除了顺序容器外,标准库还定义了三个顺序容器适配器:stack、queue和priority_queue。适配器(adaptor)是标准库中的一个通用概念****。容器、迭代器和函数都有适配器。本质上,一个适配器是一种机制,能使某种事物的行为看起来像另外一种事物一样。一个容器适配器接受一种已有的容器类型,......
  • C++ 额外的 string 操作
    string构造:▲《C++Primer》P321string裁剪:▲322修改string的操作:▲《C++Primer》P323string的搜索操作:▲《C++Primer》P325string的compare函数:▲《C++Primer》P327......
  • C++数组衰变机制
    inta[10]={};//下面两个式子等价int*p=a;int*p=&a[0];我们在讨论数组的时候经常看到这么一种说法,也就是说,数组名就是指向数组首元素的指针。但是上面这个过程产生了隐式转换,也就是数组衰变过程数组名!=指针数组就是数组,指针就是指针,不能将数组变量名认为是......
  • C++之size_t
    size_t是C++中的一个无符号整型,用于表示对象的大小或容器中的元素数量。它定义在<cstddef>头文件或<cstdlib>头文件中,通常用于数组索引和内存分配。其大小取决于平台(通常是32位或64位),因此在处理大数据时比int更安全。特点无符号类型:size_t只能表示非负数,适合表示......
  • C++之template
    C++模板是一种强大的特性,允许你编写通用的代码。它分为两种类型:函数模板和类模板。函数模板:可以定义一个函数,使用类型参数。例如:点击查看代码template<typenameT>Tadd(Ta,Tb){returna+b;}类模板:允许你定义一个类,使用类型参数。例如:点击查看代......
  • 南沙C++信奥赛陈老师解一本通题 2099:【23CSPJ普及组】公路(road)
    ​ 2099:【23CSPJ普及组】公路(road)时间限制:1000ms      内存限制:524288KB提交数:3793   通过数: 1575【题目描述】小苞准备开着车沿着公路自驾。公路上一共有 nn 个站点,编号为从 11 到nn。其中站点 ii 与站点i+1i+1 的距离为vivi 公里。......
  • C++函数指针详解
    概述本文详细介绍了C/C++中的普通函数和类的成员函数的指针。结合C++代码示例讲解了函数指针作为其他函数的输入、返回值以及typedef如何提高代码可读性的实用技巧。对于类的成员函数(方法)指针,则分为静态和非静态两种情况。最后总结了普通函数、类的非静态成员函数、类的静态成员......
  • 在树莓派上安装c++版本的opencv并运行
     这里默认你用的是树莓派的镜像(因为ubantu对树莓派的性能占用有点大)树莓派安装使用opencvc++版本首先我们安装依赖sudoapt-getinstallbuild-essentialsudoapt-getinstallcmakelibgtk2.0-devpkg-configlibswscale-devsudoapt-getinstalllibjpeg-devlibpng......