阿里基础平台开发初面:C++和C有什么核心区别,有什么重要的特性?

 前几天阿里的电话初面,面的是基础平台开发

不仅问了获奖项的含金量如何,队伍中承担的角色,发挥了什么作用,获奖是因为什么?

项目经历中技术比较精彩的部分,有什么可以改进的点?

如何快速了解一个课题,用什么方式?

这些简历面之外,还问了一些相关的问题

C++和C有什么核心区别,有什么重要的特性?





  C
C++之间的相似之处是: 

  • 两种语言都有相似的语法。
  • 两种语言的代码结构相同。
  • 两种语言的编译是相似的。
  • 它们共享相同的基本语法。几乎所有 C 的运算符和关键字也出现在 C++ 中并且做同样的事情。
  • C++的语法比C稍有扩展,但基本语法是一样的。
  • 两者的基本内存模型都非常接近硬件。
  • 两种语言中都存在相同的堆栈、堆、文件范围和静态变量的概念。

 

CC++的区别在于: 
C++ 可以说是 C 的超集。C++ 的主要新增特性是面向对象编程异常处理和丰富的 C++ 库。 

下面是 C 和 C++ 之间的差异表: 
 

CC++
C 由 Dennis Ritchie 于​​ 1969 年至 1973 年间在 AT&T 贝尔实验室开发。C++ 由 Bjarne Stroustrup 于 1979 年开发。
C 不支持多态、封装和继承,这意味着 C 不支持面向对象的编程。C++ 支持多态封装继承,因为它是一种面向对象的编程语言。
C 是 C++ 的子集。C++ 是 C 的超集。
C 包含 32 个关键字C++ 包含 63 个关键字
对于代码的开发,C 支持过程式编程C++ 被称为混合语言,因为 C++ 支持过程面向对象的编程范式
数据和函数在 C 中是分开的,因为它是一种过程编程语言。数据和函数在 C++ 中以对象的形式封装在一起。
C 不支持信息隐藏。封装隐藏数据,以确保按预期使用数据结构和运算符。
C 支持内置数据类型。C++ 支持内置和用户定义的数据类型。
C 是一种函数驱动语言,因为 C 是一种过程编程语言。C++ 是一种对象驱动语言,因为它是一种面向对象的编程。
C 不支持函数和运算符重载。C++ 支持函数和运算符重载。
C 是一种函数驱动的语言。C++ 是一种对象驱动的语言
C 中的函数未在结构内部定义。函数可以在 C++ 的结构中使用。
C 中不存在命名空间功能。C++ 使用命名空间,以避免名称冲突。
C 使用的头文件是stdio.hC++ 使用的头文件是iostream.h
C 不支持引用变量。C++ 支持引用变量。
C 不支持虚函数和友元函数。C++ 支持函数和友元函数。
C 不支持继承。C++ 支持继承。
C 不关注数据,而是关注方法或过程。C++ 专注于数据,而不是专注于方法或过程。
C 提供malloc()calloc()函数用于动态内存分配,以及free()用于内存释放。C++为内存分配提供了new操作符,为内存释放提供了delete操作符
C 不支持对异常处理的直接支持。C++ 支持异常处理。
scanf()和 printf() 函数用于 C 中的输入/输出。cin 和 cout用于C++ 中的输入/输出

C++的重要特性 

C++是一种通用编程语言,它是作为C 语言的增强而开发的,包括面向对象的范例。它是一种命令式和编译型语言。 

面向对象编程

C++ 是一种面向对象的编程语言,不像 C 是一种过程编程语言。这是C++最重要的特性。它可以在编程时创建/销毁对象。此外,它可以创建可以创建对象的蓝图。我们在本文中讨论了 C++ 中的面向对象编程概念。

面向对象编程语言的概念:​​​​​​​

机器独立

C++ 可执行文件不是平台独立的(Linux 上的编译程序不会在 Windows 上运行),但是它们是机器独立的。

让我们借助一个示例来了解 C++ 的这一特性。假设您编写了一段可以在 Linux/Windows/Mac OSx 上运行的代码,这使得 C++ 机器独立,但 C++ 的可执行文件不能在不同的操作系统上运行。

简单的

从某种意义上说,它是一种简单的语言,可以将程序分解为逻辑单元和部分,具有丰富的库支持和多种数据类型。此外,C++ 的自动关键字使生活更轻松。

自动关键字

auto 的想法是让 C++ 编译器在编译时推断数据类型,而不是让你每次都声明数据类型。请记住,您不能在没有初始化程序的情况下声明某些内容。编译器必须有某种方法来推断您的类型。

  • C++
// C++ program for using auto keyword
 
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
 
    // Variables
    auto an_int = 26;
    auto a_bool = false;
    auto a_float = 26.24;
    auto ptr = &a_float;
 
    // Print typeid
    cout << typeid(a_bool).name() << "\n";
    cout << typeid(an_int).name() << "\n";
    return 0;
}
输出: 
b
i

 

高级语言

C++ 是一种高级语言,不像 C 是一种中级编程语言。它使使用 C++ 工作变得更容易,因为它是一种高级语言,因为它与人类可理解的英语密切相关。

受欢迎的

C++ 可以成为许多其他支持面向对象编程特性的编程语言的基础语言。Bjarne Stroustrup发现 Simula 67 是有史以来第一个面向对象的语言,它缺乏模拟并决定开发 C++。

区分大小写

很明显,C++ 是一种区分大小写的编程语言。例如,cin用于从输入流中获取输入。但如果“Cin”不起作用。HTML 和 MySQL 等其他语言不是区分大小写的语言。

基于编译器

C++ 是一种基于编译器的语言,与 Python 不同。那就是用于编译的 C++ 程序,并使用它们的可执行文件来运行它。由于C++ 是一种比 Java 和 Python 相对更快的语言

动态内存分配

当程序在 C++ 中执行时,变量被分配到动态堆空间。在函数内部,变量被分配在堆栈空间中。很多时候,我们事先并不知道在定义的变量中存储特定信息需要多少内存,并且可以在运行时确定所需内存的大小。

内存管理

  • C++ 允许我们在运行时分配变量或数组的内存。这称为动态内存分配
  • 在JavaPython等其他编程语言中,编译器会自动管理分配给变量的内存。但在 C++ 中情况并非如此。
  • 在 C++ 中,内存没有用后必须手动取消分配动态分配的内存。
  • 内存的分配和释放可以分别使用new 和 delete 操作符来完成。

下面是说明 C++ 中的内存管理的程序:

  • C++​​​​​​​
// C++ implementation to illustrate
// the Memory Management
 
#include <cstring>
#include <iostream>
using namespace std;
 
// Driver Code
int main()
{
    int num = 5;
    float* ptr;
 
    // Memory allocation of
    // num number of floats
    ptr = new float[num];
 
    for (int i = 0; i < num; ++i) {
        *(ptr + i) = i;
    }
 
    cout << "Display the GPA of students:"
         << endl;
    for (int i = 0; i < num; ++i) {
 
        cout << "Student" << i + 1
             << ": " << *(ptr + i)
             << endl;
    }
 
    // Ptr memory is released
    delete[] ptr;
 
    return 0;
}
输出: 
Display the GPA of students:
Student1: 0
Student2: 1
Student3: 2
Student4: 3
Student5: 4

 

多线程

  • 多线程是多任务处理的一种特殊形式,多任务处理是一种允许您的系统同时执行两个或多个程序的功能。一般来说,有两种多任务处理方式:基于进程的和基于线程的
  • 基于进程的多任务处理程序的并发执行。基于线程的多任务处理处理等效程序的多道程序。
  • 多线程程序包含两个或多个将同时运行的部分。这样一个程序的每个部分都称为一个线程,每个线程都定义了一个单独的执行路径。
  • C++ 不包含对多线程应用程序的任何内置支持。相反,它完全依赖操作系统来提供此功能。

下面是说明C++ 中的多线程的程序

  • C++

// C++ implementation to illustrate
// the working of Multi-threading
 
#include <cstdlib>
#include <iostream>
#include <pthread.h>
 
using namespace std;
 
#define NUM_THREADS 5
 
// Function to print Hello with
// the thread id
void* PrintHello(void* threadid)
{
    // Thread ID
    long tid;
    tid = (long)threadid;
 
    // Print the thread ID
    cout << "Hello World! Thread ID, "
         << tid << endl;
 
    pthread_exit(NULL);
}
 
// Driver Code
int main()
{
 
    // Create thread
    pthread_t threads[NUM_THREADS];
    int rc;
    int i;
 
    for (i = 0; i < NUM_THREADS; i++) {
 
        cout << "main() : creating thread, "
             << i << endl;
 
        rc = pthread_create(&threads[i],
                            NULL,
                            PrintHello,
                            (void*)&i);
 
        // If thread is not created
        if (rc) {
            cout << "Error:unable to"
                 << " create thread, "
                 << rc << endl;
 
            exit(-1);
        }
    }
 
    pthread_exit(NULL);
}

输出:

本教程假设您在 Linux 操作系统上工作,我们将使用 POSIX 编写一个多线程 C++ 程序。POSIX Threads 或 Pthreads 提供的 API 可用于许多类 Unix POSIX 系统,例如 FreeBSD、NetBSD、GNU/Linux、Mac OS X 和 Solaris。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值