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能够在编译时给出用户自己定义的错误信息。
C++简单介绍的更多相关文章
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍
一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...
- yii2的权限管理系统RBAC简单介绍
这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...
- angular1.x的简单介绍(二)
首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...
- Linux的简单介绍和常用命令的介绍
Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...
- iOS-iOS开发简单介绍
概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...
- iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...
- iOS开发UI篇—UITabBarController简单介绍
iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...
- Android开发自学笔记(Android Studio)—4.界面编程与View组件简单介绍
一.引言 Android应用开发最重要的一份内容就是界面的开发,无论你程序包含的内容多么优秀,如若没有一个良好的用户交互界面,最终也只是会被用户所遗弃.Android SDK提供了大量功能丰富的UI组 ...
随机推荐
- 转:获取GridView中RowCommand的当前索引行
获取GridView中RowCommand的当前索引行 前台添加一模版列,里面添加一个LinkButton 前台 (如果在后台代码中用e.CommandArgument取值的话前台代码就必须在按钮中设 ...
- 大数据学习——scala函数与方法
package com /** * Created by Administrator on 2019/4/8. */ object TestMap { def ttt(f: Int => Int ...
- python 学习分享-列表元组篇
1 列表(list) 下面的代码就是把一个变量赋值为列表 a=['laay','aay','ay','y'] 列表中存在索引,可以通过索引来访问列表中的值,也可以通过索引完成切片 print(a[0] ...
- 数据库导入Exel,输入到浏览器
db.php <?php require dirname(__FILE__)."/dbconfig.php";//引入配置文件 class db{ public $conn= ...
- bat 文件读取乱码问题
使用 for 循环 type file1.txt > file2.txt 文件读取后可能会出现乱码,需要在 bat 文件中设置 chcp 表示将批处理设置为 utf-8 编码,这样在生成文件和读 ...
- 【瓜分5000元奖金】Wannafly挑战赛13
链接:https://www.nowcoder.com/acm/contest/80/A来源:牛客网 zzy的小号 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...
- [译]pandas中的iloc loc的区别?
loc 从特定的 gets rows (or columns) with particular labels from the index. iloc gets rows (or columns) a ...
- 【bzoj1040】[ZJOI2008]骑士 并查集+基环树dp
题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在 ...
- 计算机、程序和java概述
1.1 计算机.程序和java概述计算机包括硬件(hardware)软件(software)两部分.硬件包括计算机中看得见的物理部分,软件提供看不见的指令,指令控制硬件并且使得硬件完成特定的任务.一台 ...
- 【bzoj1406】 AHOI2007密码箱 数论
在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示.经过艰苦的破译,小可可发现,这些图标表示一个数 ...