C++初次告白

今天初次接触了C++,听说挺难得,我虔诚的心又颤抖了一下,不知为什么,我总是后知后觉,比别人慢半拍,有时也很担心,比那些有天赋的人差的好像很远,可是只要自己不断地努力就可以挽救一些吧,希望自己可以 把他当一个朋友一样去深深的交流,互相发现对方的特点,佳佳 让我们交往吧。让你融入我的心里。

第一次交往的经历:
(1)命名空间 using namespace
你有那么的内存,却从来不曾凌乱,你把每一个字节都管理的井井有条,避免命名冲突,方便模块话编程,命名空间可以让我们对不同的重名数据进行使用

#include<iostream>
#include<cstdlib>
using namespace std;

namespace A
{
    int a(50);
 } 
 namespace run
 {
    int a(30);
 }
 int main()
 {
    cout<<A::a<<"--"<<run::a<<endl;
    return 0;
 }

using呢,其实也是一个关键字,这个关键字起到使用某个命名空间的作用,扩充命名空间:当命名空间不够,可以在外部进行命名空间的内容的添加。 也就是说命名空间在内部外部都可以进行添加

#include<cstdlib>
#include<iostream>
int a = 1;

int main()
{
    int a = 3;
    std::cout<<::a;
    system("pause");
    return 0;

}

c语言当中没有办法引用全局变量。已经被屏蔽了。C出现重名,会无法引用全局变量。
在C++当中就可以使用域运算符,这时候把全局当作了一个域进行引用。

::前面什么都没有一般就是意味这全局

2.C++基本的输入输出流(简单介绍)
iostream包含了两个基础类型istream和ostream,分别表示输入流和输出流,使用cin(发音see-in)称为标准输入,cout(see-out)为标准输出。

#include<iostream>
int main()
{
    std::cout<<"Enter two numbers:"<<std::endl;
    int v1 = 0,v2 = 0;
    std::cin>>v1>>v2;
    std::cout<< "The sum of "<< "and" << v2 <<" is " << v1+v2<<std::endl;
    return 0;
}

3.重载(C++为什么支持重载?)
C++允许在同一作用域类声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能,函数重载必须是参数的个数或者类型不同,与返回值无关。
在C语言当中是不支持函数重载的,在c语言编译的时候是完全根据函数名进行编译的,而c++当中,函数进行重命名的时候,与C的重命名不一样,会加上参数的内容。
也就是调用的时候,会根据不同的参数,找寻不同的地址,进入不同的函数。

#include<iostream>
#include<cstdlib>
int add(int a, int b)
{
    return a + b;
}

double add(double a, double b)
{

    return a + b+1;
}

int main()
{
    std::cout<<add(4 , 5)<<std::endl;
    std::cout<<add(4.0, 5.0)<<std::endl;
    system("pause");
    return 0;
}

为什么需要函数重载(why)?

试想如果没有函数重载机制,如在C中,你必须要这样去做:为这个print函数取不同的名字,如print_int、print_string。这里还只是两个的情况,如果是很多个的话,就需要为实现同一个功能的函数取很多个名字,如加入打印long型、char*、各种类型的数组等等。这样做很不友好!
类的构造函数跟类名相同,也就是说:构造函数都同名。如果没有函数重载机制,要想实例化不同的对象,那是相当的麻烦!
操作符重载,本质上就是函数重载,它大大丰富了已有操作符的含义,方便使用,如+可用于连接字符串等!

  • -

缺省参数

就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。

#include<iostream>
#include<cstdlib>
int add(int a = 2, int b = 3)
{

    return a + b;
}

int main()
{

    std::cout << add() << std::endl;


    system("pause");
    return 0;
}

函数的处理顺序是从右往左。所以对于缺省参数来说,他的缺省顺序也应该是从右向左
,把缺省的放到右边,不缺省的放到最左边。缺省参数中间不能穿插不缺省的参数。

函数指针没有默认参数,函数指针必须全部输入数据,而且函数指针需要精确调用,函数重载和函数缺省参数容易发生冲突。

引用

这里主要用于左值引用。

int ival = 1024;
int &refval = ival;//refVal指向ival(是ival 的另一个名字)
int &refVa12;//报错:引用必须被初始化
一般在初始化变量时,初始值会被拷贝到新建的对象中,然而定义引用时,程序把他的初始值绑定在一起,而不是将初始值拷贝给引用,一旦初始化完成,引用将和他的初始值对象一直绑定在一起,因而无法令引用重新绑定到另外一个对象,因此引用必须初始。

int &refVal4 = 10//错误,引用类型的初始值必须是一个对象
double dval  = 3.14
int &refVal5 = dval//此处引用类型的初始值必须是int对象
    int i, &ri = i;
    i = 5, ri = 10;
    std::cout << i << "" << ri << std::endl;
    输出为1010

例外

引用的类型必须与其所引用对象的类型一致,但是有两个例外,第一是初始化常量引用时允许使用任意表达式作为初始值,只要该表达式结果能转换成引用的类型即可,尤其允许为一个常量引用绑定一个非常量对象,字面值,甚至一个表达式。

int i = 42const int &r1 = i;//允许将const int&绑定到一个普通的对象上
const int &r2 = 42;//正确,r1是一个常量引用
const int &r3 = r1*2;//正确,r3是一个常量引用
int &r4 = r1*2;//错误,r4是一个普通的非常量引用
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值