C++基础知识介绍

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)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常 量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值