C++第一节课

C++数据类型

这里写图片描述

几个概念

命名空间是C++标准库引入的,其中命名空间可以解决变量冲突问题,当出现局部变量和全局变量同名的时候, 局部变量优先被访问.同时命名空间的格式如同一下代码

namespace name1
{
int a = 0;
}namespace name2
{
int a = 2;
}

注意C++中的所有组件都是在一个叫做std的命名空间中被定义.这里来看两段代码

//代码1
#include <iostream>
using namespace std;namespace name1
{
int a = 0;
}namespace name2
{
int a = 2;
}int main()
{cout<<"exexpected name1::a = 0, actual name1::a = "<<name1::a<<endl;cout<<"exexpected name2::a = 2, actual name2::a = "<<name2::a<<endl;name1::a = 3;name2::a = 4;cout<<"exexpected name1::a = 3, actual name1::a = "<<name1::a<<endl;cout<<"exexpected name2::a = 2, actual name2::a = "<<name2::a<<endl;return 0;
}
//代码2
#include <iostream>namespace name1
{
int a = 0;
}namespace name2
{
int a = 2;
}int main()
{std::cout<<"exexpected name1::a = 0, actual name1::a = "<<name1::a<<std::endl;std::cout<<"exexpected name2::a = 2, actual name2::a = "<<name2::a<<std::endl;name1::a = 3;name2::a = 4;std::cout<<"exexpected name1::a = 3, actual name1::a = "<<name1::a<<std::endl;std::cout<<"exexpected name2::a = 2, actual name2::a = "<<name2::a<<std::endl;return 0;
}

上面两端代码中唯一的区别就是代码1在第二行加入和using namespace std;而代码2没有这一行,而在cout以及endl前面加了一个std::,也许到这里大家心里就会有个疑惑,那就是此处的std和::是什么,接下来就来探讨一下这个std,::分别代表的什么含义

几个重要基本概念

:: 作用域解释符
来看一段代码

namespace std//C++的标准库命名空间
{
}

输入输出对比
来看一段代码

int main()
{int i2 = 1;double d2 = 2.22;cout<<"int -> "<<i2<<", double -> "<<d2<<endl;cout<<"please input int and double:"<<endl;cin>>i2>>d2;cout<<"================\n";cout<<"int -> "<<i2<<", double -> "<<d2<<endl;return 0;
}

在C++中输入输出对应的是cin,cout,其中cout 是标准输出对象,cin是标准输入对象,而其中<<是输出操作符,意思就是将<<后面的内容输出到控制台中,而>>是输入操作符,意思是从标准输入中输入的内容流向>>后面的变量中,endl是一个换行操作符,它们都属于C++的标准库.

缺省参数

//全缺省
int Add1(int a = 0, int b = 0)
//版缺省
int Add2(int a, int b = 0)
//注意缺省参数在缺省的过程中必须从右往左缺省,不能从左往右缺省

指针和引用

引用

引用不是定义一个新的变量,它不会给变量开辟新的空间,而是给变量重新起了一个名字.其中应用有很多的特点
1.一个变量可以有多个别名,这就像一个人有一个大名,但是可以有多个小名
2.引用必须初始化
3.引用只能在初始化的时候引用一次,不能改变让其引用其他变量
注意事项
应用在使用的时候只能缩小其范围不能增大其范围,也就是说对一个可读可写的变量可以起一个别名是const类型的,但是对一个只读变量不能给其起一个可读可写的变量

引用做参数的交换函数

void Swap(int& left, int& right)
{int tmp = left;left = right;right = tmp;
}

交换函数有三个版本,一个是值交换,一个是值交换一个是地址交换,另一个是引用交换,其中值交换交换的只是两个临时变量,与实参没有关系,而地址交换交换的是对应的地址所存放的变量的值,引用交换交换的是两个变量的别名,也相当于交换了两个实参

几个注意事项

1.不要返回一个临时变量的引用
2.如果返回对象出了当前函数的作用域之后仍然存在,则返回引用,因为引用更加高效

一个指针占多少字节

在32位程序下一个指针占4个字节,在64位程序下一个指针占8分字节.但是看到这里可能就有人会问为什么在不同程序下一个指针占的字节不同呢.原因是在3位程序下进程的虚拟地址空间总共是4G,而所谓的指针也就是地址,操作系统为了将这么多的地址高效的管理,它就将这些虚拟地址空间进行一个一个的编号,而32位程序对应的地址范围是4G,要对这4G的内存进行编号就必须使用4个字节才能将其一个一个的进行有效的编号.同理在64位程序下进程的虚拟地址空间有8G的地址空间要对这8G的虚拟地址空间进行编号就必须使用8个字节将其有效的编号.所以看到这里大家应该明白了为什么在32位程序下指针占4个字节,而在64位程序下指针占8个字节了吧.

指针和引用的几个区别

1.指针可以出尔反尔,但是引用只能从一而终
2.引用必须针对一个有效的变量,但是指针它是可以为空的
3.sizeof对应的引用是指的是引用的这个变量的大小是多少,但是sizeof指针对应的大小在不同的程序下对应的大小是固定的(关于sizeof(指针)上面已经说明在此就不再叙述了)
4.指针的++和引用的++不一样,指针的++对应的是加一个指针类型的大小,而引用的++对应的是给这个变量++
5.相比而下,引用比指针会更加安全一点.

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

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

相关文章

【C/C++】关键字static

http://blog.csdn.net/woxiaohahaa/article/details/51014224 参考自&#xff1a;http://www.cnblogs.com/biyeymyhjob/archive/2012/07/19/2598815.html &#xff08;华山大师兄&#xff09; 这里我们只讨论了C语言的static 首先我们回顾一下各种变量在内存中的位置&#xff1…

HDU5391威尔逊定理

威尔逊定理 当且仅当p为素数,p | (p-1)!1 若p为合数,则pa*b;如果a!b,那么p|(p-1)!, 如果ab,如果p为4,那么p|(p-1)!2,如果p大于4,那么sqrt和sqrt(2q)肯定属于(p-1)!中,可以整除 #include<cstdio> #include<cstring> #include<algorithm> #include<climit…

C++的基本认识

简单介绍C 语言特点 支持数据封装和数据隐藏 在C中&#xff0c;类是支持数据封装的工具&#xff0c;对象则是数据封装的实现。C通过建立用户定义类支持数据封装和数据隐藏。 在面向对象的程序设计中&#xff0c;将数据和对该数据进行合法操作的函数封装在一起作为一个类的定…

OD 投篮大赛

/*** 题目描述* 你现在是一场采用特殊赛制投篮大赛的记录员。这场比赛由若干回合组成&#xff0c;过去几回合的得分可能会影响以后几回合的得分。* 比赛开始时&#xff0c;记录时空白的。你会得到一个记录操作的字符串列表aops&#xff0c;其中ops[i]是你需要记录的第i项操作&a…

IO多路复用之epoll总结

http://www.cnblogs.com/Anker/p/3263780.html 1、基本知识 epoll是在2.6内核中提出的&#xff0c;是之前的select和poll的增强版本。相对于select和poll来说&#xff0c;epoll更加灵活&#xff0c;没有描述符限制。epoll使用一个文件描述符管理多个描述符&#xff0c;将用户关…

2018南京区域赛 J-Prime Game

完全没有头绪 听完队友讲的我还是楞了好半天菜慢慢理解.我好菜啊 首先要弄懂题目的意思,转换一下题意就是求每个素因子出现区间的次数.区间长度最短为1.我们分析,第一个数的因子会影响1* n个区间(暂时不考虑重复),第二个数的因子会影响2 * (n-1)个区间,以此类推.因此我们只需要…

3_V1-类和对象 -- 默认成员函数

定义一个日期类 #include <iostream> #include <assert.h> using namespace std;class Date { public:void Display(); private:int _year;int _month;int _day; }; 注意: 在定义一个类的时候往往会将其成员变量定义为私有,成员函数定义为公有.这是为了达到软件…

C++ 类模板二(类模版与友元函数)

http://www.cnblogs.com/zhanggaofeng/p/5661829.html //类模版与友元函数 #include<iostream> using namespace std;template<typename T> class Complex{ public:Complex(T a,T b);void Print() const//const修饰的是this指针{cout << this->Real <&…

HDU - 2973威尔逊定理

核心问题就是那个等式 我们观察到等式可以写成(n-1)!-1/n-[(n-1)!/n]的形式&#xff0c;这样就应该联想到威尔逊定理了。 回顾一下威尔逊定理的内容&#xff1a;当且仅当n为素数的时候n|(n-1)!-1&#xff0c;n为合数且大于4的时候n|(n-1)!【参见威尔逊定理的证明】 对于这个…

linux网络编程之posix 线程(四):posix 条件变量与互斥锁 示例生产者--消费者问题

http://blog.csdn.net/jnu_simba/article/details/9129939 一、posix 条件变量 一种线程间同步的情形&#xff1a;线程A需要等某个条件成立才能继续往下执行&#xff0c;现在这个条件不成立&#xff0c;线程A就阻塞等待&#xff0c;而线程B在执行过程中使这个条件成立了&#x…

3-V2-类和对象 -- const内联 静态成员 友元

const修饰成员函数 在成员函数后面加一个const, const修饰this指针指向的对象, 保证调用这个const成员函数的对象在函数内不会被改变 注意:成员函数如果不修改成员变量,则加上const,成员函数如果要修改成员变量,此时就不能给其加上const修饰了 1.const对象不能调用非const…

C语言 二级指针内存模型混合实战

http://www.cnblogs.com/zhanggaofeng/p/5485833.html //二级指针内存模型混合实战 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h>//将内存模型①和内存模型②的数据拷贝到内存模型③ char ** threemodel(ch…

扩展欧几里得算法

对于a∗xb∗yca*xb*yca∗xb∗yc,这样一个二元一次方程组&#xff0c;我们想要得到他的一组解可以用扩展欧几里得算法&#xff0c;参数列表的a,b,x,y就是方程中的a,b,x,y&#xff0c;d计算出来是gcd(a,b)。 算法求出来的是a∗xb∗ygcd(a,ba*xb*ygcd(a,ba∗xb∗ygcd(a,b的一组解…

Linux 网络编程八(epoll应用--大并发处理)

http://www.cnblogs.com/zhanggaofeng/p/5901316.html //头文件 pub.h #ifndef _vsucess#define _vsucess#ifdef __cplusplus extern "C" {#endif //服务器创建socket int server_socket(int port);//设置非阻塞 int setnonblock(int st);//接收客户端socket int ser…

约瑟夫问题

n个人编号为0…n-1围成一个圈,从0开始报数,每经过k个人那个人就退出这个圈不再报数,问最后留下来的人的编号. 朴素的做法当然是模拟,但是n,k的值一旦变得比较大的时候就难以解决问题. 我们考虑归纳的解决问题 当只有一个人的时候答案显然为0, 假设我们已知n-1个人的时候答案为…

【数据结构与算法】内部排序之三:堆排序(含完整源码)

转载请注明出处&#xff1a;http://blog.csdn.net/ns_code/article/details/20227303 前言 堆排序、快速排序、归并排序&#xff08;下篇会写这两种排序算法&#xff09;的平均时间复杂度都为O&#xff08;n*logn&#xff09;。要弄清楚堆排序&#xff0c;就要先了解下二叉堆这…

模线性方程(中国剩余定理+扩展中国剩余定理)

已知一系列除数和模数,求最小的满足条件的数 我们先考虑一般的情况&#xff0c;即模数不互质。&#xff08;扩展中国剩余定理&#xff09; 我们考虑两个方程的情况 x%MR xk1∗MRxk1 * MRxk1∗MR x%mr xk2∗mrxk2 * mrxk2∗mr 所以k1∗MRk2∗mrk1 * MRk2 * mrk1∗MRk2∗mr 即…

C++:Vector和List的实现

Vector的实现 //test.h #pragma once#include <iostream> #include <cstdio> #include <string.h> #include <assert.h>using namespace std;typedef int DataType;#define TESTHEADER printf("\n%s\n", __FUNCTION__)class Vector { publi…

【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)

http://blog.csdn.net/hanjing_1995/article/details/51539578 使用两个栈实现一个队列 思路一&#xff1a; 我们设定s1是入栈的&#xff0c;s2是出栈的。 入队列&#xff0c;直接压到s1即可 出队列&#xff0c;先把s1中的元素倒入到s2中&#xff0c;弹出s2中的栈顶元素&#x…

POJ 1006 Biorhythms

中国剩余定理的模板题 只是有一个问题就是求出来Xk*MR中的R比给定的日期还大&#xff0c;但是如果负数的整除就不是向下取整了&#xff0c;为了解决这个问题&#xff0c;我们将R减小M&#xff0c;这样总是正的&#xff0c;求出来的就没有什么问题。 #include <iostream>…