C++与C语言有什么不同?

  • Post category:cplus

C++与C语言之间有很多区别,主要包括以下几个方面:

一、编程范式

C++对于面向对象的程序设计有着很好的支持,这使得程序可以更加容易地维护和扩展。相对而言,C语言主要面向过程的编程范式,程序代码的组织和结构没有C++那么严谨。同时,C++还可以进行泛型编程和函数式编程,极大提高了程序的重用性。

示例:

C++实现一个简单的类,实现计算器的功能:

class Calculator {
public:
    Calculator(int _x, int _y) {
        x = _x;
        y = _y;
    }
    int add() {
        return x + y;
    }
    int subtract() {
        return x - y;
    }
private:
    int x;
    int y;
};

int main() {
    Calculator cal(10, 5);
    std::cout << "The result of add: " << cal.add() << std::endl;
    std::cout << "The result of subtract: " << cal.subtract() << std::endl;
    return 0;
}

C实现同样的程序,可能会这样写:

struct Calculator {
    int x;
    int y;
};

void init(Calculator *cal, int x, int y) {
    cal->x = x;
    cal->y = y;
}

int add(Calculator *cal) {
    return cal->x + cal->y;
}

int subtract(Calculator *cal) {
    return cal->x - cal->y;
}

int main() {
    Calculator cal;
    init(&cal, 10, 5);
    printf("The result of add: %d\n", add(&cal));
    printf("The result of subtract: %d\n", subtract(&cal));
    return 0;
}

二、支持的类型

C++新增了一些基本数据类型,同时还支持了类、结构体、枚举等自定义数据类型的定义。这些数据类型的扩展大大增加了程序的灵活性。另外,C++还支持了泛型类型的编程,这使得数据类型的定义更加灵活和可扩展。

示例:

C++定义一个圆类的例子:

class Circle {
public:
    Circle(double _r) {
        r = _r;
    }
    double getArea() {
        return 3.14 * r * r;
    }
    double getPerimeter() {
        return 2 * 3.14 * r;
    }
private:
    double r;
};

int main() {
    Circle c(2.5);
    cout << "Area: " << c.getArea() << endl;
    cout << "Perimeter: " << c.getPerimeter() << endl;
    return 0;
}

C实现同样的程序,可能会这样写:

struct Circle {
    double r;
};

void init(Circle *c, double r) {
    c->r = r;
}

double getArea(Circle *c) {
    return 3.14 * c->r * c->r;
}

double getPerimeter(Circle *c) {
    return 2 * 3.14 * c->r;
}

int main() {
    Circle c;
    init(&c, 2.5);
    printf("Area: %f\n", getArea(&c));
    printf("Perimeter: %f\n", getPerimeter(&c));
    return 0;
}

三、支持的函数类型和语句

C++支持函数重载和缺省参数的特点,这使得程序在实现时可以更加灵活高效。C++还支持Lambda表达式和多线程编程。C语言并不支持这些语法和特性。

示例:

C++实现两个数相加、两个数相减、三个数相乘的函数重载:

int calculate(int a, int b) { // 两个数相加
    return a + b;
}

int calculate(int a, int b, int c) { // 三个数相乘
    return a * b * c;
}

double calculate(double a, double b) { // 两个数相减
    return a - b;
}

int main() {
    cout << "2 + 5 = " << calculate(2, 5) << endl;
    cout << "2 * 3 * 5 = " << calculate(2, 3, 5) << endl;
    cout << "2.5 - 1.2 = " << calculate(2.5, 1.2) << endl;
    return 0;
}

C语言实现相同的程序可能会这样写:

int calculate2(int a, int b) { // 两个数相加
    return a + b;
}

int calculate3(int a, int b, int c) { // 三个数相乘
    return a * b * c;
}

double calculate1(double a, double b) { // 两个数相减
    return a - b;
}

int main() {
    printf("2 + 5 = %d\n", calculate2(2, 5));
    printf("2 * 3 * 5 = %d\n", calculate3(2, 3, 5));
    printf("2.5 - 1.2 = %f\n", calculate1(2.5, 1.2));
    return 0;
}

综上所述,C++与C语言在编程范式、支持的类型和函数类型等方面有着很大的区别。虽然两种语言都可以实现相同的功能,但是C++在代码的可读性和可维护性等方面更加优秀,适用于复杂的大型项目的开发。