博客
关于我
重学C++笔记之(一)基础介绍
阅读量:537 次
发布时间:2019-03-08

本文共 1730 字,大约阅读时间需要 5 分钟。

C++是一种多范式编程语言,结合了过程性语言、面向对象编程和泛型编程三种不同的编程范式。作为C语言的扩展,C++在继承C语言结构性的基础上,引入了类和对象的概念,使得程序设计更加面向数据和对象。同时,C++通过模板机制支持了泛型编程,为程序员提供了更高级的代码复用能力。

C语言

C语言是20世纪70年代贝尔实验室开发的初等过程性语言。其设计初衷是为 UNIX 操作系统开发而成,旨在提供一种高效、灵活的编程方式。与汇编语言不同,C语言通过抽象化的方式减少了对硬件的依赖,使得程序的迁移性得到了显著提升。

C语言的结构性特点体现在其支持for、while循环以及条件语句等结构化语句上。程序的设计遵循自顶向下的原则,通过将程序划分为函数模块,实现了模块化的设计理念。

面向对象编程

面向对象编程(OOP)是C++引入的核心概念之一。与过程性编程强调的算法不同,OOP更注重数据的管理和复用。类在OOP中扮演着核心角色,它定义了对象的格式和行为规则。通过继承和多态性等机制,对象可以在程序中灵活地扩展和使用。

C++中的类是对象的蓝图,描述了对象的属性和方法。通过new操作符,程序员可以根据类的定义创建对象,这些对象是程序运行中的核心实体。

C++和泛型编程

C++的泛型编程支持通过模板机制实现代码的抽象和复用。与OOP关注数据不同,泛型编程注重独立于特定数据类型的代码设计。通过模板,程序员可以编写一种通用的函数或数据结构,这种结构可以被多个具体的数据类型使用。

C++模板的设计使得代码更加灵活和可维护。通过编写模板函数,程序员可以在不修改代码的情况下支持多种数据类型的操作。

C++的起源与发展

C++最初由Bjarne Stroustrup在20世纪80年代开发,最初名为"CPP"。它最初的目标是为C语言提供更强大的功能,最终发展成为一种独立的编程语言。1988年,ISO标准委员会正式承认C++作为标准化的编程语言。

C++的发展经历了多个标准版本的演变:

  • C++98(ISO/IEC 14882:1998):引入了异常处理、运行时类型识别(RTTI)、模板和标准模板库(STL)。
  • C++03(ISO/IEC 14882:2003):与C++98兼容,没有重大改变。
  • C++11(ISO/IEC 14882:2011,曾被称为C++0x):新增了统一初始化语法、增强的const编译支持以及更多的标准库功能。

编程相关

C/C++编程过程通常包括以下几个阶段:

  • 预处理器:处理宏定义、条件编译指令、头文件包含等。
  • 编译器:将源代码转换为中间代码或汇编代码。
  • 汇编程序:将汇编语言翻译为机器指令。
  • 链接器:将目标代码和库文件组合成可执行程序。
  • 源代码文件通常以 .c.cc.cxx.cpp 等扩展名保存。不同的编译器可能对这些文件名的处理方式有所不同。

    在UNIX系统中,编译命令通常为 CC -o my_program my_source.c other_source.c。编译完成后,系统会自动链接相关的目标文件生成可执行文件。

    在Linux系统中,常用的编译器是g++(GNU C++编译器)。编译命令为 g++ my.cxx precious.cxx,生成的可执行文件通常命名为 a.out。如果只修改了某个源文件,可以使用 g++ my.cxx precious.o 进行重新编译。

    在Windows环境下,常用的编译器是Visual C++或第三方工具链(如Cygwin或MinGW)。编译命令通常为 g++ great.cpp,生成的可执行文件为 a.exe

    其他基础介绍

  • 注释

    • 单行注释使用 //
    • 多行注释使用 /*...*/
  • 头文件

    • C++新式头文件不带扩展名,例如 iostream
    • 使用新式头文件时需要在开头加上 using namespace std;
    • 旧式头文件通常带有 .h 扩展名,例如 iostream.h
  • 关键字

    • namespace 用于定义命名空间。
    • using 用于导入命名空间或声明函数。
    • template 用于定义模板函数或类。
  • 文章参考:《C++ Primer Plus第六版》

    转载地址:http://uzbiz.baihongyu.com/

    你可能感兴趣的文章
    Symbolic Aggregate approXimation(SAX,符号聚合近似)介绍-ChatGPT4o作答
    查看>>
    Orcale表被锁
    查看>>
    svn访问报错500
    查看>>
    sum(a.YYSR) over (partition by a.hy_dm) 不需要像group by那样需要分组函数。方便。
    查看>>
    ORCHARD 是什么?
    查看>>
    Struts2中使用Session的两种方法
    查看>>
    Stream API:filter、map和flatMap 的用法
    查看>>
    STM32工作笔记0032---编写跑马灯实验---寄存器版本
    查看>>
    order by rand()
    查看>>
    SSM(Spring+SpringMvc+Mybatis)整合开发笔记
    查看>>
    Orderer节点启动报错解决方案:Not bootstrapping because of 3 existing channels
    查看>>
    org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement profile
    查看>>
    sql查询中 查询字段数据类型 int 与 String 出现问题
    查看>>
    org.apache.commons.beanutils.BasicDynaBean cannot be cast to ...
    查看>>
    org.apache.dubbo.common.serialize.SerializationException: com.alibaba.fastjson2.JSONException: not s
    查看>>
    sqlserver学习笔记(三)—— 为数据库添加新的用户
    查看>>
    org.apache.http.conn.HttpHostConnectException: Connection to refused
    查看>>
    org.apache.ibatis.binding.BindingException: Invalid bound statement错误一例
    查看>>
    org.apache.ibatis.exceptions.PersistenceException:
    查看>>
    org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned
    查看>>