您的位置:

C语言和C++的区别和联系

一、基础语法

C语言和C++语言的基础语法有许多相似之处,却也存在一些不同点。其中最显著的区别是C++具有类和对象的概念,这是C语言所不具备的。因此,在C++的程序中,可以使用类和对象来实现封装、继承和多态等面向对象的特性,而在C语言中则不能。

/* C语言程序示例 */
#include 
int main()
{
    int a, b, sum;
    printf("请输入两个整数:\n");
    scanf("%d%d", &a, &b);
    sum = a + b;
    printf("%d+%d=%d\n", a, b, sum);
    return 0;
}

/* C++程序示例 */
#include 
   
using namespace std;
class Adder
{
public:
    int add(int a, int b)
    {
        return a+b;
    }
};
int main()
{
   int a = 2, b = 3;
   Adder adder;
   cout << a << "+" << b << "=" << adder.add(a, b) << endl;
   return 0;
}

   
  

二、函数重载

函数重载是C++的一个特性,它允许在一个类或命名空间内定义同名函数,但参数类型、顺序和个数不同。C语言中不支持函数重载,也就是说,同名函数在C语言中是不允许存在的。

/* C++中的函数重载 */
#include 
using namespace std;
int Add(int a, int b)
{
    return a + b;
}
double Add(double a, double b)
{
    return a + b;
}
int main()
{
   cout << Add(2, 3) << endl;   // 5
   cout << Add(2.5, 3.5) << endl;  // 6
   return 0;
}

  

三、命名空间

命名空间也是C++的一个特性,它可以避免函数、变量和类等命名冲突的问题。C语言中没有命名空间,因此,如果在C程序中定义同名变量或函数时,就容易出现命名冲突的问题。

/* C++中的命名空间 */
#include 
using namespace std;
namespace A
{
    int num = 1;
    void func()
    {
        cout << "namespace A" << endl;
    }
}
namespace B
{
    int num = 2;
    void func()
    {
        cout << "namespace B" << endl;
    }
}
int main()
{
   cout << A::num << endl;   // 1
   cout << B::num << endl;   // 2
   A::func();    // namespace A
   B::func();    // namespace B
   return 0;
}

/* C语言中不存在命名空间 */
#include 
   
int num = 1;
void func()
{
    printf("In C\n");
}
int main()
{
    printf("%d\n", num);  // 1
    func();   // In C
    return 0;
}

   
  

四、继承与多态

继承和多态是C++的核心特性,它们是面向对象思想的重要表现形式。在C++中,一个类可以从另一个类派生出来,从而去继承父类的属性和方法。同时,通过虚函数的概念,C++允许派生类对基类的同名函数进行重写,达到多态的效果。

/* C++中的继承和多态 */
#include 
using namespace std;
class Animal
{
public:
    virtual void sound() = 0;
    virtual ~Animal() {}
};
class Dog: public Animal
{
public:
    void sound()
    {
        cout << "汪汪汪" << endl;
    }
};
class Cat: public Animal
{
public:
    void sound()
    {
        cout << "喵喵喵" << endl;
    }
};
int main()
{
    Animal *animal1 = new Dog();
    animal1->sound();  // 汪汪汪
    Animal *animal2 = new Cat();
    animal2->sound();  // 喵喵喵
    delete animal1;
    delete animal2;
    return 0;
}

/* C语言中没有继承和多态的概念 */
#include 
   
void sound(char *s)
{
    printf("%s\n", s);
}
int main()
{
    sound("汪汪汪");  // 汪汪汪
    sound("喵喵喵");  // 喵喵喵
    return 0;
}

   
  

五、头文件

头文件是C和C++中经常使用的一种技术,它可以将函数和变量的声明放在头文件中,从而方便其他文件调用。C语言和C++语言的头文件在使用上也存在一些差异,其中最主要的区别是C语言中需要使用extern关键字来声明外部变量,而C++中则不需要。

/* C++中的头文件 */
#include 
#include 
   
using namespace std;

/* C语言中的头文件 */
#include 
    
extern int num;

int main()
{
    /* C++ */
    string str = "hello world";
    cout << str << endl;

    /* C */
    printf("%d\n", num);
    return 0;
}