C++基础知识介绍

来源:互联网 发布:越狱软件一键安装软件 编辑:程序博客网 时间:2024/04/29 12:14

1.名字空间
**************************************************************
命名空间是用来组织和重用代码的。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了。为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了。
**************************************************************

#include <iostream>using namespace std;namespace name1{int a = 3;}namespace name2{double a = 3.14;}int main() {cout << name1::a << endl;//::作用域解析符cout << name2::a << endl;return 0;//我们使用了两个相同名字的全局变量:var,一个是被定义在name1名字空间里的,另一个是被定义在name2名字空间内的.因为有了名字空间所以没有发生重定义的错误.}

2.C++基本的输入输出流
**************************************************************
1.数据的输出cout
cout是标准输出设备即显示器(默认设备)连接的预定义输出流。C++语言的插入运算符“<<”向输出流发送字符,cout是数据的目的地,插入运算符“<<”把数据传送到cout。
输出流对象cout输出数据的语句格式为:
cout<<数据1<<数据2<<……<<数据n;
其中,“<<”是输出操作符,用于向cout输出流中插入数据。
在cout中还可以使用流控制符控制数据的输出格式,但要注意使用这些流控制符时,要在程序的开始部分嵌入头文件“iomanip.h”。
这里写图片描述
2.数据的输入cin
cin是与标准输入设备即键盘(默认设备)连接的预定义输入流。它从输入流中取出数据,数据从输入提起运算符“>>”处流进程序。
输入流对象cin输入数据的语句格式为:
cin>>变量名1>>变量名2>>……>>变量名n;
其中,“>>”是输入操作符,用于从cin输入流中取得数据,并将取得的数据传送给其后的变量,从而完成输入数据的功能。
注意:“>>”操作符后除了变量名外不得有其他数字、字符串,否则系统会报错。
*****************************************************************

#include<iostream>#include<iomanip.h>int main(){int a=1;double b=3.14;int c=0;cout<<int-><<a<<double-<<b<<endl;cout<<输入一个数:<<endl;cin>>c;cout<<Dec<<c<<endl;cout<<Hex<<c<<endl;cout<<Oct<<c<<endl;return 0;}

3.重载(c++为什么要支持重载)
**************************************************************
重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
重载是指相同的函数名,但参数的类型或个数中只要有所不同,便进行再定义,编译之后重载的函数都具有不同的地址,也就是说虽然函数名相同,实际上是不同的函数,在调用时,编译系统会根据不同之处自动区别是调用哪一个函数。对于普通函数和后面要学的类的成员函数都适用。

**************************************************************

#include <iostream>using namespace std;float fun(float x);double fun(double x);int main ( ){    float f = 132.64;    double d = 132.64;    cout << fun(f) << endl;    cout << fun(d) << endl;    //cout << fun(5) << endl;    //编译错,参数5可以转换为float,也可转换为double    return 0;}float fun(float x){    return x / 2.0 ;}double fun(double x){    return x / 3.0;}

运行结果:
66.32
44.2133
4.C++缺省参数
**************************************************************
缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定参数。对于C++的缺省参数的使用我们应该注意以下几点:
缺省参数不能出现在函数指针、函数引用以及typedef中
缺省参数可以在不同的声明中逐步给出
不同作用域的声明中定义的缺省参数是独立的,互不影响;
同一作用域的声明中不能重复定义同一个参数的缺省值。

**************************************************************

#include <iostream>using namespace std;int sum(int x=0, int y=0){return x+y;}int main ( ){    cout << sum() << endl;//结果为0    cout << sum(6) << endl;//结果为6    cout << sum(6, 10) << endl;//结果16    return 0;}

一旦为函数的某个参数指定了缺省值,则必须为后续参数也定义缺省值,从右到左定义缺省参数。

//半缺省参数int Add2 (int a, int b = 0){return a + b;}void Test (){Add1();Add1(1);Add1(1,1);Add2(2);Add2(2,2);}

5.指针和引用(概念、使用方法、做参数、做返回值的作用,指针和引用的区别)

**************************************************************
指针,全称为指针变量,是用来存储内存地址的一种变量。程序中,一般通过指针来访问其指向的内存地址中的内容(数据)。
引用,是C++中提出来的一种新的使用变量的方式,即,给实际变量起个别名,通过这个别名来引用实际的变量。标准C中不支持变量的引用。
这两个概念没有任何相关性。
指针是实实在在的变量,有自己的内存存储空间,它可以指向任何有效的变量。
引用是一种形式、方法,定义的引用变量,实际上是原实际变量的另一个名称(别名),引用变量本身没有自己的实际存储空间,操作引用变量,就是在操作实际变量。
定义的格式为:
类型&引用变量名=已定义过的变量名;//类型必须和引用变量是同种类型
引用的特点:
1. 一个变量可取多个别名
2. 引用必须初始化
3. 引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。
引用和指针的区别和联系
1. 引用只能在定义时初始化一次,之后不能改变指向其它变量(从一而终);指针变量的值可变。
2. 引用必须指向有效的变量,指针可以为空。
3. sizeof指针对象和引用对象的意义不一样。sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小。
4. 指针和引用自增(++)自减(–)意义不一样。
5. 相对而言,引用比指针更安全。

**************************************************************

void main()  {      //普通引用      int  a = 10;      int &b = a;      printf("b:%d \n", b);      //常引用      int  x = 20;      const int &y = x;  //常引用 是 让变量 引用只读属性 不能通过y去修改x了      //y = 21;      //常引用 初始化 分为2种情况      //1> 用变量 初始化 常引用      {          int x1 = 30;          const int &y1 = x1; //用x1变量去初始化 常引用      }      //2> 用字面量 初始化 常量引用      {          const int a = 40;  //c++编译器把a放在符号表中          int &m = 41; //普通引用 引用一个字面量 请问字面量有没有内存地址 答案是没有          //引用 就是给内存取多个门牌号 (多个别名) 没有内存,怎么给它取别名,因此会报错!          //printf("&40:%d \n", &40);          const int &m = 43;  //c++编译器 会 分配内存空间       }      cout<<"hello..."<<endl;      system("pause");      return ;  }

引用做参数:在函数内部会对此参数进行修改 提高函数调用和运行效率
引用作返回值:以引用返回函数值,定义函数时需要在函数名前加&
用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。

//值返回int Addi(int a,int b){    return a+b;}//引用返回int& Add(int a,int b){    int ret = a+b;    return ret;}

引用作为返回值,必须遵守以下规则:
(1)不能返回局部变量的引用。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了”无所指”的引用,程序会进入未知状态。
(2)不能返回函数内部new分配的内存的引用。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一 个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。
(3)可以返回类成员的引用,但最好是const。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常 量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。

原创粉丝点击