c++入门基础知识

命名空间  
刚开始接触c++,我们会发现与C语言相比不光头文件有所不同,还会发现using namespce std;这句话,其实这就是c++的命名空间。 
(1) 概念  
命名空间是为了防止名字冲突提供更加可控的机制。命名空间分割了全局命名空间,其中每一个命名空间是一个作用域。由三部分组成,分别是namespace、空间名字和一系列由花括号括起来的声明和定义。 
(2) 作用  
是建立一些互相分隔的作用域,把一些全局实体分隔开来。 
(3) 例子  
命名空间和类就好比是文件夹和文件的关系。命名空间就像是文件夹,它包含了若干个文件,这样可以将定义的很多类整齐地摆放起来,不仅可以避免命名冲突,还可以简化对类成员的访问。用花括号把文件的一部分括起来, 并以关键字namespace开头给它 
起一个名字:
namespace name1
{
int a = 0;
}
namespace name2
{
int a = 1;
}
name1: : a = 3;
name2: : a = 4;
::是作用域解析符
(4) 优点  
如果在程序一开始不写上using namespace std;那么每次使用时就要这样写,这样显然比较麻烦。 

注:endl相当于c语言中的\n.

#include<iostream>
//using namespace std;
int main()
{std::cout<<"hello world"<<std::endl;cout<<"hello world"<<endl;return 0;
}
(5) 嵌套使用
#include<iostream>
using namespace std;
namespace you
{int a=1;namespace me{int a=2;}
}
int main()
{cout <<you::me::a << endl; return 0;
}

输入输出流

流:数据之间的传输操作。 
输入输出操作是由istream输入流和ostream输出流提供的,iostream是从这两个类中派生的,允许双向输入和输出。这个库定义了3个标准流对象。 
(1)cin:标准输入的istream类对象,使用户能够从终端读数据,默认是键盘。> > 是输入操作符。 
(2)cout:标准输出的ostream类对象,使用户能够从终端写数据,默认是屏幕。< < 是输出操作符。 
(3)cerr:标准输出的ostream类对象,cerr输出程序错误,默认是屏幕。

重载

(1)概念

所谓重载,其实就是“一物多用”。 
函数重载,即在同一作用域类, 一组函数的函数名相同, 参数列表不同( 个数不同/类型不同) ,返回值可同可不同。不仅函数可以重载,运算符也可以重载,例如,运算符”<<”和”>>”既可以作为位移运算符,又可以作为输入操作符和输出操作符。

(2)原因

那么,为什么C++支持重载呢?其原因在于函数名的修饰规则。从代码的编译到运行,在VC6.0或VS这种编译器下,它是系统直接完成了翻译与链接,直接生成了运行结果。 
编译器内部完成了翻译部分: 
1.预处理 
2.编译过程:将高级语言转为汇编语言。 
3.汇编过程:汇编语言转为二进制程序,生成目标文件。 
4.链接部分:所引用的数据链接进来,形成可执行程序。 
比如一个函数的声明如下: 
void function(int x,int y); 
在c语言中,编译器在编译后在库中的名字为_function 
在c++中,编译器在编译后在库中的名字为_function_int_int,在链接时是找名字进行链接,由于C++中它们的名字不一样,所以就不会报错。 
(3)规则

① 函数名要相同; 
② 参数个数不同,参数类型不同,参数顺序不同,均可构成重载; 
③ 返回值类型不同则不可以构成重载。

C++缺省参数

(1)概念:在函数声明或定义的时候给形参一个默认的参数。这样在调用该函数,如果没有给实参,函数的这个形参就默认为这个值。

// 全缺省参数
int Add1 (int a = 0, int b = 0)
{
return a + b;
}
//半缺省参数
int Add2 (int a, int b = 0)
{
return a + b;
}int main()
{
count<<Add(1,2)<<endl;//此处用默认的(1,2)
count<<Add()<<endl;//不传值时默认用缺省的(0,0)
return 0;
}

(2)使用规则

缺省参数赋值必须要连续且从右向左赋值; 
不能把const的全局变量作为缺省值; 
缺省值必须是常量; 
调用时你只能从最后一个参数开始进行省略;

指针和引用

这里写图片描述

指针 
学习C语言时已经知道,每一个数据都是有地址的,通过地址就可以找到所需的内存空间。 
(1)概念:一个变量的地址称为该变量的指针。 
(2)使用方法:基类型 * 指针变量名

*const指针*(常指针)int a=1;
const int*p=&a;//定义了p为指向整形变量a的const指针变量
*p=15;//非法(不允许通过指针变量改变它指向的对象的值)

指针的作用和特点前面已经有了深入学习,在这里不再加以详细介绍。

引用

(1)概念:引用不是定义一个新的变量, 而是给一个已经定义的变量重新起一个别名。 
(2)使用方法:类型 &引用变量名 = 已定义过的变量名.

*普通引用*
int mian()
{int a=10;int&b=a;
}

*const引用*
int main()
{const int a=10;//a被const修饰,它的值就不能再被改变int &b=a;//编译不能通过const int &b=a;//此处可以通过,a的值改变b的值也会改变const int &b=5; // 常量具有常性, 只有常引 用可以引 用常量
}

*不同类型变量间的引用*
int main()
{int a=20;double b=30.123;int &c=b;//不能通过const int &c=b;//编译可以通过,原因见下图
}


这里写图片描述 
想要用int类型的c来引用double型的b,首先先会将b变量放入一个int类型临时变量,再用const int类型的c来引用这个临时变量,临时变量具有常属性,所以就需要有一个const int类型的名字来完成这个引用。

(3)特点: 
1. 一个变量可取多个别名 
2. 引用必须初始化 
3. 引用只能在初始化的时候引用一次, 不能改变为再引用其他的变量。

(4)作用

1.做参数

1.做参数#include<iostream>
using namespace std;
void swap(int&a,int&b)
{int c=a;a=b;b=c;
}
int main()
{int x1=10;int x2=20;cout<<x1<<" "<<x2<<endl;swap(x1,x2);cout<<x1<<" "<<x2<<endl;
}

2.做返回值

#include<iostream>
using namespace std;
int red;
int &Add(int t1,int t2)
{int ret=t1+t2;return ret;
}
void main()
{int a=2,b=3;int &c=Add(a,b);cout<<c<<endl;
}

指针和引用的区别

(1)指针是存储另一个对象的地址的变量,而引用是对象的别名。 
(2)指针未被初始化或被删除时,应将NULL赋给它,但引用不能为空。 
(3)sizeof指针对象和引用对象的意义不一样,sizeof引用是指向变量的大小,sizeof指针是指对象地址的大小。 
(4)引用只能在定义时初始化一次, 之后不能改变指向其它变量( 从一而终), 指针变量的值可。 
(5) 指针和引用自增(++)自减(–)意义不一样。 
(6) 相对而言, 引用比指针更安全。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读书笔记之《得未曾有》

作者 安妮宝贝&#xff0c;2014年笔名改为“庆山” 感想 第一次读庆山的作品&#xff0c;可以书名来总结的一下&#xff0c;得未曾有——获得了一种未曾有过得感受。 一、感受作者 高晓松老师的节目里说过一句话&#xff0c;写作需要长时间的观察人性、需要极强的观察能力。庆山…

数据库索引的实现原理

转载&#xff1a;https://blog.csdn.net/kennyrose/article/details/7532032 强烈建议参阅链接&#xff1a;http://www.linezing.com/blog/?p798#nav-1 说白了&#xff0c;索引问题就是一个查找问题。。。 数据库索引&#xff0c;是数据库管理系统中一个排序的数据结构&…

斐波那契序列 集锦

[定理1] 标准Fibonacci序列&#xff08;即第0项为0&#xff0c;第1项为1的序列&#xff09;当N大于1时&#xff0c;一定有f(N)和f(N-1)互质 其实&#xff0c;结合“互质”的定义&#xff0c;和一个很经典的算法就可以轻松证明对&#xff0c;就是辗转相除法互质的定义就是最大公…

linux ssh密钥登录配置

首先确保服务器ssh服务已启动&#xff0c;用户能够正常登录&#xff0c;然后配置客户端&#xff0c;过程如下&#xff1a; 一、先用自已的用户登录到服务器&#xff0c;比如我用 uplinux 登录到服务器 二、运行 SSH Secure Shell 工具中的“Secure Shell Client ”&#xff0c;…

C++基础知识简答题

1、C 可执行程序的内存分布 BSS&#xff1a;Block Started by Symbol 存放程序中未初始化的全局变量 数据段&#xff1a; 存放已初始化的全局变量&#xff0c;静态内存分配 代码段&#xff1a; 存放执行代码 堆heap&#xff1a; 存放运行中动态分配的内存段&#xff0c;可扩张或…

linux驱动简单介绍

linux驱动简单介绍 驱动基本介绍 驱动。顾名思义就是“驱使硬件设备行动”。设备驱动与底层硬件之间打交道&#xff0c;按照硬件设备的具体操作方式来读写设备寄存器&#xff0c;最终完成一系列操作。 设备 驱动充当了应用程序和应用软件直接的纽带&#xff0c;它使得应用软件只…

远离客户陷阱小故事 转

出处&#xff1a; http://ilovecode.cnblogs.com 做项目做产品可以有3个境界&#xff1a;1 挣钱的&#xff0c;2 做品牌的&#xff0c;3 很酷的。有的人从境界1做到3&#xff0c;有得人从3做到1。 我是从1做到3&#xff0c;因为有了钱&#xff0c;你才能远离垃圾项目和不…

typename的作用

一、与class的区别 template声明式中&#xff0c;class和typename这两个关键字意义完全相同 template<class T> class Widget; template<typename T> class Widget; 二、什么时候要用typename&#xff1f;比如下面的代码 template <typename C> void …

[转]详细讲解提高数据库查询效率的实用方法、外键关于性能

1.对查询进行优化&#xff0c;应尽量避免全表扫描&#xff0c;首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断&#xff0c;否则将导致引擎放弃使用索引而进行全表扫描&#xff0c;如&#xff1a; select id from t w…

C语言 scanf()和gets()函数的区别

C语言 scanf()和gets()函数的区别 1.相同点&#xff1a;scanf( )函数和gets( )函数都可用于输入字符串 2.不同点&#xff1a;两者在功能上有所区别,具体区别如下&#xff1a; 要实现如下需求“从控制台输入字符串”有如下两种实现方式&#xff1a; 1>使用gets()函数实现使用…

静态链接库与动态链接库的区别

(1)、静态链接库&#xff1a;在链接阶段(生成可执行文件)将库函数全部载入到可执行文件中&#xff0c;可执行文件中包含了所有的库函数 优点&#xff1a;应用程序可以独立运行&#xff1b; 缺点&#xff1a;如果多次调用库中的函数&#xff0c;则该库函数会被调用多次 (2)、动…

用C语言实现SGF格式围棋棋谱解析器

这是本人&#xff08;liigo&#xff09;独立实现的SGF格式围棋棋谱文件解析器&#xff0c;本文介绍其实现细节。网络上肯定可以找到完善的开源的SGF解析器&#xff0c;这是毋庸置疑的&#xff0c;我不直接使用它们&#xff0c;也不参考它们的实现代码&#xff0c;而是自己独立编…

各种***方式说明

使消息保密的技术和科学叫做密码编码学&#xff08;cryptography&#xff09;。密码编码学是密码体制的设计学&#xff0c;即怎样编码&#xff0c;采用什么样的密码体制以保证信息被安全地加密。从事此行业的人员叫做密码编码者&#xff08;cryptographer&#xff09;。 与之相…

C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区

C内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区栈&#xff0c;就是那些由编译器在需要的时候分配&#xff0c;在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中&#xff0c;位于用户虚拟地址空间顶部的是用…

Uoj 441 保卫王国

Uoj 441 保卫王国 动态 \(dp\) .今天才来写这个题.设 \(f[u][0/1]\) 表示子树 \(u\) 中不选/选 \(u\) 时的最小权值和,显然有:\(f[u][0]\sum f[v][1] ,f[u][1]w[u]\sum \min(f[v][0],f[v][1])​\) .现在要资瓷修改 \(x\) 的点权 \(w[x]\) ,容易发现修改后只会影响 \(x\) 到根节…

行存和列存的区别

写入&#xff1a; 行存储的写入是一次完成&#xff0c;数据的完整性因此可以确定。 列存储需要把一行记录拆分成单列保存&#xff0c;写入次数明显比行存储多。 行存储在写入上占有很大的优势 数据修改&#xff1a; 行存储是在指定位置写入一次&#xff0c;列存储是将磁盘定位…

javascript中的命名规则和方法

javascript变量名需要遵守两条简单的规则&#xff1a;1、第一个字符必须是字母、下划线&#xff08;_&#xff09; 或美圆符号&#xff08;$&#xff09;。2、余下的字符可以是下划线、美圆符号或任何字母或数字字符。 命名方法&#xff1a;1、Camel标记法——首字母是小写的&a…

jquery插件开发导读

最近发现项目中有些js代码可以重用&#xff0c;但是不知道怎么样组织&#xff0c;在网上调研后&#xff0c;发现jquery插件是一种很好的组织方式&#xff0c;而且项目也采用了jquery框架&#xff0c;所以花了点时间学习jquery插件开发&#xff0c;并且动手将部分项目代码转成jq…

C语言缓冲文件系统和非缓冲文件系统

C 语言所使用的磁盘文件系统有两大类&#xff1a;一类称为缓冲文件系统&#xff0c;又称为标准文件系统&#xff1b;另一类称为非缓冲文件系统。缓冲文件系统的特点是系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。从磁盘向内存读入数据时&#xff0c;则一次从磁盘…

Swift 里集合类型协议的关系

&#xfffc; &#xfffc; Sequence A type that provides sequential, iterated access to its elements. 是最基础的协议&#xff0c;可以通过迭代来获取它的元素。 有两个关联类型&#xff1a; /// A type representing the sequences elements.associatedtype Element//…