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…

IO多路复用之epoll总结

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

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

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

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…

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…

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

转载请注明出处&#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 即…

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

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

C++::探索对象模型

前面我们已经知道, 在没有虚函数的时候, 对象的大小就是对应的成员变量的大小, 而成员函数不会占用对象的空间, 今天我们来讨论一下, 当类中定义了虚函数的时候, 此时对象的大小以及对象模型 非继承下的对象模型 class Base { public:virtual void func1(){cout << &qu…

软件测试相关概念

什么叫软件测试 软件测试就是测试产品没有错误,同时又证明软件是可以正确运行的 测试和调试的区别 调试一般都在开发期间 ,测试是伴随着整个软件的生命周期, 调试是发现程序中问题并且解决问题, 测试是发现程序中的缺陷 软件测试的目的和原则 目的:验证软件有没有问题 原…

C++静态成员函数访问非静态成员的几种方法

https://www.cnblogs.com/rickyk/p/4238380.html 大家都知道C中类的成员函数默认都提供了this指针&#xff0c;在非静态成员函数中当你调用函数的时候&#xff0c;编译器都会“自动”帮你把这个this指针加到函数形参里去。当然在C灵活性下面&#xff0c;类还具备了静态成员和静…

HDU2683——欧拉完全数

题目要求符合等式的数&#xff0c;我们首先要做的就是分析这个数&#xff1a; 对于这个等式&#xff0c;我们可能什么都看不出来&#xff0c;左边很难化简的样子&#xff0c;所以我们就要想到通过变化怎么样把右边化成和左边形式差不多的样子。结合组合数我们想到二项式定理&am…

获取网络接口信息——ioctl()函数与结构体struct ifreq、 struct ifconf

http://blog.csdn.net/windeal3203/article/details/39320605 Linux 下 可以使用ioctl()函数 以及 结构体 struct ifreq 结构体struct ifconf来获取网络接口的各种信息。 ioctl 首先看ioctl()用法ioctl()原型如下&#xff1a;#include <sys/ioctl.h>int ioctl(int fd, i…

java中引用传递

基本概念 栈内存 所谓的栈内存就是存储进程在运行过程中变量的内存空间 堆内存 所谓的堆内存就是存储系统中数据的内存空间 数组相关的引用传递 先来看一段代码 public class ArrayDemo {public static void main(String[] args) {int[] x null;x new int[3];System.o…

(原创)C++11改进我们的程序之右值引用

http://www.cnblogs.com/qicosmos/p/3369940.html 本次主要讲c11中的右值引用&#xff0c;后面还会讲到右值引用如何结合std::move优化我们的程序。 c11增加了一个新的类型&#xff0c;称作右值引用(R-value reference)&#xff0c;标记为T &&&#xff0c;说到右值引用…

(原创)C++11改进我们的程序之move和完美转发

http://www.cnblogs.com/qicosmos/p/3376241.html 本次要讲的是右值引用相关的几个函数&#xff1a;std::move, std::forward和成员的emplace_back&#xff0c;通过这些函数我们可以避免不必要的拷贝&#xff0c;提高程序性能。move是将对象的状态或者所有权从一个对象转移到另…

微型个人博客服务器

Http相关简介 Http是应用层的基于请求响应的一个协议, 其中Http的请求响应可以分为四部分. 请求行, 请求报头,空行, 请求正文.其中请求行包括了请求方法, url, 版本号, 请求报头包括请求属性, 冒分割的键值对, 每组属性之间都以换行的形式分开, 最后一空行作为请求的结束标识.…