C++编程思想学习日记1-----C与C++的一些区别

最近在C++编程思想这一本书,所以打算把自己每天看到的一些东西记录一下。

总所周知,C++是从C语言发展而来,他们之间有很多的相同的地方,同样也有很多不同的地方。如果要问C和C++有什么不同,肯定很多人都会说C是面向过程的语言,C++是面向对象的。还有C++中有class,有模板等等。但是C++和C中有很多地方,用法基本上相同,但是同样也有区别的东西又那些呢?

1.不带参数的函数

如果下面我问这样一个问题: int func();这样一个函数在C和C++中有什么不同,这个函数有表示什么?对于这个函数的意思,大家都会说是一个没有参数,返回值为int型的函数。当然在C++中的话,这样说没有问题。但是在C语言中会有一点点不同。C语言中对于像这种形式的函数的意义是,返回值为int,参数不确定的一个函数。有点类似于...的可变参数。如果声明为int func(void)的话,就没有什么歧义了,在C和C++中都代表返回值为int,没有参数的函数。

2.强制转换

对于强制转换,大家都很熟悉,例如:

int a = 10;

double b = (double)a;

上面的是C语言中的强制类型转换。

在C++中为了兼容C语言,在保留了上面这种转换方式的同时,新增加了一种类似函数调用的转换方式,例如:

int a = 10;

double b = double(a);

这两种转换方式的区别在于,一种是给类型加上括号,另一种是给变量加上括号。

当然在C++中还推出了一种显示的转换语法:static_cast, const_cast, reinterpret_cast, dynamic_cast。

3.struct的声明

struct,结构体的定义大家都会,例如:

struct ST_XXX

{

  int a;

  float b;

 };

但是,在C语言中定义了一个结构体之后,想要定义一个结构体的对象,相对而言比较麻烦,必须要在结构体名称前面加上struct,如下所示:

struct ST_XXX st;

还有另外的一种定义方式,就是使用typedef,如下所示:

typedef struct

{

  int a;

    float b;

}ST_XXX;

这样的话,在定义一个对象的时候,就可以去掉前面的struct,例如:

ST_XXX st;

当然第二种方式而已显得还是比较麻烦,因为必须要使用到typedef。当然这只是在C语言中,而在C++中则不存在这个问题。C++中就好像是上面两张种方式的结合体,例如:

struct ST_XXX

{

  int a;

  float b;

 };

ST_XXX st;

4.真假的判定

C语言中不存在bool类型的变量,所以真假的判定是通过是否为0来判定的。

5.枚举类型enum

对于一个已经声明的枚举类型而言,例如:

enum Color

{

  red,

  green,

  blue

};

Color a;

对于变量c执行a++的语句,在C语言中是可以的。因为C语言中的枚举很简单,只是将一个整数值和一个名称联系起来。而C++中对于枚举,是将枚举看着一个新类型,对枚举的类型检查比在C中更加的严格。因为当执行a++这个语句的时候,会执行两次类型转换。首先会把a从一个枚举的color型转换为一个int型(C++中是合法的),然后将转换成为int后的a执行++操作。然后将递增后的a转换成为color类型(在C++中是不合法的)。

可知,C和C++中的枚举类型还是有一些区别的,使用的时候需要多加注意。

时间: 2024-10-13 02:58:56

C++编程思想学习日记1-----C与C++的一些区别的相关文章

Java编程思想学习第一天

今天开始正式学习Java编程思想,把遇到的一些比较经典的语句记录下来,作为自己学习的一份成果! 一. 面向对象的基本特性: 第一:万物皆为对象        第二:程序是对象的集合,他们通过发送消息来告知彼此所要做的   第三:每个对象都有自己的由其他对象所构成的存储   第四:每个对象都拥有其类型   第五:某一特定类型的所有对象都可以接收同样的消息   对象具有状态.行为和标识 二. 每个对象都提供服务      1. 将对象想象为一个服务提供者,程序本身将向用户提供服务 2. 将对象想象为

【Java编程思想--学习笔记(一)】访问控制-包

Java编程思想–学习笔记(一) 访问控制(或隐藏具体实现)与"最初的实现并不恰当"有关. 1.包:库单元 我们之所以要导入包,就是要提供一个管理名字的空间机制. 每个java文件只能有一个public类.其他私有类为主public·类提供支持. 1.1 代码组织 与编译型语言不同,java可运行程序是一组可以打包并压缩成java文档文件(JAR,使用Java的jar文档生成器)的.class文件. 使用package和import关键字,使得不会出现名称冲突问题. 注意:java包的

JAVA编程思想学习笔记——第一章 对象导论

搞了一年多java,野路子出身,发现java基础这块还是相当的薄弱!故决定学习<Java编程思想>这本书.在此把学习的知识点记录下! 面向对象的五大特性 1.万物皆为对象 2.程序是对象的集合,它们通过发送消息来告诉彼此所要做的 3.每个对象都由自己的由其它对象所构成的存储 4.每个对象都拥有其类型 5.某一特定类型的所有对象都可以接收同样的信息  单根继承结构 所有的类都继承自单一的基类,Object.在单根集成结构中的所有对象都具有一个公用接口,所以他们归根到底都是相同的基本类型.单根集成

java编程思想学习(1)

Smalltalk 这是第一种成功的面向对象程序设计语言,也是Java 的基础语言.Smalltalk (java的基础语言)的五大基本特征: (1) 所有东西都是对象.可将对象想象成一种新型变量:它保存着数据,但可要求它对自身进行操作.理论上讲,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象. (2) 程序是一大堆对象的组合:通过消息传递,各对象知道自己该做些什么.为了向对象发出请求,需向那个对象"发送一条消息".更具体地讲,可将消息想象为一个调用请求,它调

[Java编程思想-学习笔记]第3章 操作符

3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("Hello, world"); 我们都会感觉太冗长了,能不能简单一些呢?静态导入可以省略掉System,就像这样 import static java.lang.System.*; public class Hello { public static void main(String[] args) {

【java编程思想--学习笔记(四)】对象导论

写这篇博客的前言: 长话短说,我希望通过阅读<java编程思想>来使我的代码 简洁可用 . 目的的层次不同,首先具体的目标是,了解Java的特性和巩固Java的基础. 更抽象的目的如下: 1.期待以巩固基础的方式,使代码优美,简洁,高效. 2.使自己写的模块能够开放适度,好用. 3.形成一种对代码是否优美的审美观. 于是<Java编程思想>第一章 对象导论 由此开始. 1.1 抽象过程 java 相对于命令式语言的优势在于只针对于待解问题建模.后者所做的主要抽象要求所做问题基于计算

Java编程思想 学习笔记1

一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆对象. 2)程序是对象的集合,它们通过发送消息来告知彼此所要做的.要想请求一个对象,就必须对该对象发送一条消息.更具体的说,可以把消息想象为对某个特定对象的方法的调用请求. 3)每个对象都有自己的由其他对象所构成的存储.换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象. 4)每个对象都

[Java编程思想-学习笔记]第1章 对象导论

1.1  抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, Run Anywhere". 所谓的抽象过程,可以理解为对待解问题建模.比如待解问题是一个人,那么我们可以对人进行建模,它的类型是人,有属性姓名.性别.年龄,还有行为吃饭.走路.Java能直接完全据此建模编码,而无需考虑具体的计算机结构.所以当我们阅读Java程序时,正如书上说的"当你在

Java编程思想学习(十六) 并发编程

线程是进程中一个任务控制流序列,由于进程的创建和销毁需要销毁大量的资源,而多个线程之间可以共享进程数据,因此多线程是并发编程的基础. 多核心CPU可以真正实现多个任务并行执行,单核心CPU程序其实不是真正的并行运行,而是通过时间片切换来执行,由于时间片切换频繁,使用者感觉程序是在并行运行.单核心CPU中通过时间片切换执行多线程任务时,虽然需要保存线程上下文,但是由于不会被阻塞的线程所阻塞,因此相比单任务还是大大提高了程序运行效率. 1.线程的状态和切换: 线程的7种状态及其切换图如下: 2.多线