C++简单介绍

一、怎样用C++的源文件产生一个可运行程序

一个C++程序由一个或者多个编译单元组成。每一个编译单元都是一个独立的源码文件。一般是一个带.cpp的文件,编译器每次编一个文件编译单元,生成一个以.obj或者.o为后缀的目标文件。程序就是执行在这些目标文件上。这些目标文件都是二进制的文件。一旦全部的编译单元都生成了目标文件,我们就用连接器将他们连接成一个可执行的.exe文件。

我们能够在一个.cpp文件里实现多个类,也能够将多个类分散的放在多个.cpp文件里。

当改动了某一个.cpp文件后,我们仅仅须要又一次编译这个文件。就可生成新的可运行程序。

通过编译器。能够将两个cpp文件分别编译生成.o文件。在通过.o文件生成可运行程序。比如:

CC -c main.cpp

CC -c test.cpp

CC main.o test.o -o test

最后运行./test 123

在main文件里调用了test文件里的函数。在调用前须要声明test中的函数。假设文件过多的时候会出现反复声明的问题,比方A中声明了B中的函数。C中也声明了B中的函数,这时候用A调用C时会出现这个函数声明反复的错误。连接器会报错输出“unresolved symbol”(不可解析的符号),所以在实际应用中。我们是通过将这个函数声明写入头文件里,如.h\.hh\.phh\.hxx等。在我们须要调用这个函数的时候。包括这个函数的头文件就能够了。格式例如以下:

#ifndef TEST_H

#define  TEST_H

int test(int);

#endif

不要觉得程序就是一些目标文件组成的。实际情况中。可运行程序通常都会连接很多库。这些库已经实现了很多现成的功能。库主要有两种类型:

l 静态库能够直接放入可运行程序中。就像目标文件一样,但会使可运行文件变得非常大。

l 动态库DLL位于机器上的标准位置,而且在应用程序启动的时候自己主动载入他们。

C++的可编译性和对性能的追求是不同于Java和C#等语言的。

C++不会在执行时检測数组是否越界,没有垃圾信息收集器回收那些分配出去可是不再使用的动态内存。

高字节在后的系统架构(如PowerPC和SPARC)。23位变量值0x12345678会存储为4个字节:0x12、0x34、0x56、0x78。对于高字节在前的系统架构(比方Intel x86体系)。这些字节存储顺序会被颠倒过来。这样就会把内存区域中数据拷贝到磁盘或者在网络上发送二进制程序中产生差异。

二、C++语法

内敛函数(inline)在类定义中已经实现了方法。

与之相应的是把函数原型放在头文件里。而把实现这些函数的代码放在.cpp文件里。

从语法上讲这两种方法是等效的。可是当我们调用内联函数时,绝大多数编译器仅仅是对此函数做简单的扩展,而不会生成实际的函数调用。

这样会是程序执行效率更高。可是相应的会带来应用程序的增大。所以。仅仅有很easy的函数才实现为内联函数。

Virtual fun()=0//纯虚函数——没有默认实现代码而且必须在子类中实现的函数。

C++中,假设是仅仅想某个实例对象的指针要訪问类方法时,必须使用“->”,假设是实例则能够用“.”。

New动态分配的对象一般分配在“堆”上,而局部变量(在函数中定义的变量)则存储在“栈”里。

将指针定义为const类型,能够限制指针不让其改动它们,仅仅能用于调用常量成员。

Typedef又一次定义数据类型,设定成其它的名字(别名)

C++中的数据类型强制转换,此语法功能很强大。

能够改变指针类型,移除const等等。

C++中引入4种具有更为准确语义的新强制转换类型。

1、Static_cast<T>()可用于把指向A的指针强制转换为指向B的指针,其约束条件是类B必须是类A的子类。

2、Dynamic_cast<T>(),与Static_cast<T>()类似,仅仅是它使用的是执行时类型信息的方法来验证与这个指针相关的对象是否是类B的一个实例。

假设不是,强制转换就会返回一个空指针null。

3、Const_cast<T>()加入或移除对指针或者引用的const限定。

4、Reinterpret_cast<T>()把人一类型的指针或者引用转换成随意的其它类型。

可能有点模糊。我的理解就是Static_cast<T>()这样的情况是对那些操作转换规范不会出问题的转换用的,Dynamic_cast<T>()则是对那些可能出错的转换用的。由于有返回信息能够查看是否转换成功,希望有更好的解释在以下告诉我。其它两个还算比較清晰。

Static静态keyword的功能是让被此keyword声明的变量或者函数仅仅能在此编译单元下用,称这样的情况较静态连接(static linkage)。其它情况则成为外部连接(external linkage)。

命名空间的使用除了::前面加上这个命名空间名。还有以下三种机制:

定义命名空间的别名

Namespace a = aaaaaaaaaaaaaaaaaaaaaaaaa;

从命名空间中导入一个简单的标识符

Using aaaaaaaaaaaaaaaaaaaaaaaaaaa::fun;

fun();

仅仅用一条指令导入整个命名空间

Using namespace aaaaaaaaaaaaaaaaaa;

预处理器就是一个程序,能够把带“#”指令符转换成不在包括哪些指令符的源文件。

1、#include指令会把<>和””包括的头文件扩展成他们的内容。

2、#define替换成宏定义的内容。

3、#undef解除宏定义。

4、#if、#elif、#else和#endif能够处理或者跳过某部分代码。

5、#ifdef、#ifndef来避免反复包括某个头文件。

6、#error能够在编译时给出用户自己定义的错误信息。

时间: 2024-10-24 21:17:47

C++简单介绍的相关文章

python的列表,元组和字典简单介绍

引 入 java                                   python 存取多个值:数组或list集合 ------------------------> 列表,元组 key-value格式:    Map        ------------------------>    字典 自己学习发现,java跟python这两门面向对象语言在数据类型的定义上,很多思想都是互通的,这里不说java,简单介绍一下python的列表,元组和字典. 一.列表 List: 最通

javascript的return语句简单介绍

javascript的return语句简单介绍:return语句在js中非常的重要,不仅仅具有返回函数值的功能,还具有一些特殊的用法,有个清晰的把握是非常有必要的.下面就结合实例简单介绍一下return语句的作用.一.用来返回控制和函数结果:通常情况,return语句对于一个函数是很有必要的,因为往往需要函数在一系列的代码执行后会得到一个期望的返回值,而此值就是通过return语句返回,并且将控制权返回给主调函数.语法格式: return 表达式 代码实例如下: function add(){

Object-c集合的简单介绍

一.简单介绍 NSArray/NSMutableArray NSSet/NSMutableSet NSDictionary/NSMutableDictionary NSArray.NSSet.NSDictionary是不可变的,创建的时候初始化 NSMutableArray.NSMutableSet.NSMutableDictionary是可变的 二.使用介绍 NSArray是有序的数组 NSMutableArray *myArray=[[NSMutableArray alloc] init];

plsql的环境与介绍:环境的搭建和plsql的简单介绍

PLSQL编程 1.环境的搭建 (1)创建一个存储表空间 SQL> conn /as sysdbaConnected. SQL> create tablespace plsql datafile '/u01/oracle/oradata/ORCL/plsql01.dbf' size 1G; Tablespace created. (2)创建PLSQL用户SQL> create user plsql identified by plsql default tablespace plsql;

CSS之box-sizing的用处简单介绍

前几天才发现有 box-sizing 这么个样式属性,研究了一番感觉很有意思, 通过指定容器的盒子模型类型,达到不同的展示效果 例如:当一个容器宽度定义为 width:100%;  之后,如果再增加 padding 或者 border 则会溢出父容器,是向外扩张的 如果使用该样式,指定为 box-sizing: border-box; 则 padding 和 border 就不会再溢出,而是向内收缩的,这个效果感觉非常实用, 特别是 input 和 textarea 等 现在设置 100% 再直

【玩转微信公众平台之七】 PHP语法简单介绍

经过多篇的努力,我们终于成为了微信公众平台的开发者.但是别高兴的太早,就跟修真小说一样:修炼多年武破虚空,飞升到仙界后本以为成为了天仙即可跳出三界外,不在五行中.可实际到了仙界才发现,成仙只是修行的第一步......没错,成为开发者也才只是第一步,因为现在你的微信公众平台还没有任何功能,说难听点就是小白,说好听点就是白马王子,说可爱点就是小白白,说黄色点就是洗白白,说...----------------要想在微信公众平台添加功能,那就需要写代码:既然说到写代码,那么肯定是要用php(如果用AS

Zookeeper简单介绍

转自:ZooKeeper学习第一期---Zookeeper简单介绍 一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术--分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的后果.这时,有人可能会说这个简单,写一个调 度算法就轻松解决了.说这句话的人,可能对分布式系统不是很了解,所以才会出现这种误解.如果这些进程全部是跑在一台机上的

七、变量与常量的简单介绍

七.变量与常量的简单介绍 本文将介绍VB语言中的变量与常量. 基本概念 首先大家要明白变量和常量是很重要的东西,因为他们储存着程序运行中的各种数据.顾名思义,变量就是可以变的量,而常量就是不变的,这个概念和数学上的有点接近. 接下来我简单讲讲这两个重要的东西:计算机程序在不运行的时候,程序文件保存在硬盘上,当用户运行程序之后,系统就会把程序文件装进计算机的内存里面,无论在硬盘中还是内存中,程序数据都是以二进制的形式保存着的.当程序在运行的时候,可以把计算机的内存理解为一个超级大的棋盘,每个格子都

TensorFlow简单介绍和在centos上的安装

##tensorflow简单介绍: TensorFlow? is an open source software library for numerical computation using data flow graphs.https://www.tensorflow.org/TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从图

angular1.x的简单介绍(二)

首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块上如何创建控制器我已经在上一篇简单讲过了,现在补充一下,首先是控制器的命名,控制器的命名应遵循这样的规则:(view的模块名)业务名+Controller,如loginContrl.然后是要注意不能在controller里面进行dom的操作,只能在自定义的指令里的link方法里面操作dom. 关于a