初识c++

1.命名空间

std是c++中所有库的总和命名空间

//编译器  搜索:1.当前局部域  2.全局域
//::域作用限定符
#include<stdio.h>
//命名空间  //访问
namespace bit1
{
    //在命名空间可以存放变量,函数,结构体等
    int x=2;
}
//展开命名空间
using <命名空间名>::<要释放的变量或方法>
using namespace bit1;
//全局域  //影响声明周期 访问
int x=0;

int main()
{
  //局部域  //影响声明周期 访问
  int x=1;
  printf("%d",x);
  //::前没有命名空间则全局搜索
  printf("%d",::x);
  //如果有指向就去指定找
  printf("%d",bit1::x);
}

域名空间就是定义一个新的作用域,同时命名空间可以叠加(套娃)。

2.输入输出

输入istream类

cin >><变量名> >>endl; //endl为换行,可删除或替换‘\n’

输出ostream类

cout >><变量>;

int main()
{
    int roat;
     //在c++中cin自带类型匹配,如:该为int类型
    cin>>roat;     //输入:97
    cout<<roat;    //输出:97
    return 0;
}
int main()
{
    char roat;
   //该为char类型
    cin>>roat;   //输入:97
    cout<<roat;  //输出:9
    return 0;
}
问:那么还有一个7呢!
int main()
{
    char roat,nat;//我们添加一个变量
    cin>>roat>>nat;//同样:97
    cout<<roat<<endl;//输出:9
    cout<<nat;//输出:7
    return 0;
}

3.类型范围划分规则

short类型存储空间范围规则

4.变量初始化

1.除了c语言中,

int <变量名>=<变量>;

赋初值的方法,c++还提供了其他方法。

2.在c++ 11中初始化方法

int hanmburgers={24};

采用这种方法时,可以使用/省略(=)如:

int emus{7};       //输出值:7

int rheas={12};   //输出值:12

同时,也可以括号中不包含任何东西,但默认位0:

int rocs={};        //  0

int psychics{};

5.缺省函数

故名思意,就是缺少参数的函数,一般在声明中说明。

规律:从左至右依次填充。

注意:缺省函数不可跳跃式的赋值。

#include<iostream>
using namespace std;
int Add(int a=10,int b=20)
{
    return a+b;
}
int main()
{
    Add(1,2);   //函数  a=1   b=2
    Add(1);     //函数  a=1   b=20
    Add();      //函数  a=10  b=20
    Add(,2);   //不可以
    return 0;
}

c语言为什么不支持重载?

c语言查找地址是通过(字符表)名字寻找的,不允许出现相同的名字。

c++中liunx才有Z<字符长度><函数名><类型前缀>,来比对.

如:

Z3Addii;

6.函数重载

函数重载要求,函数名相同参数不同。

如:1.

改变变量类型

#include<iostream>
using namespace std;
int Add(int a=10,int b=20)
{
    return a+b;
}
double Add(double a=10.1,double b=20.1)
{
    return a+b;
}
int main()
{
    Add(10,20);
    Add(10.1,20.1);
    return 0;
}

2.

改变变量位置

#include<iostream>
using namespace std;
int Add(int a=10,int b=20)
{
    return a+b;
}
int Add(int a=10.1,double b=20.1)
{
    return a+b;
}
int main()
{
    Add(10,20);
    Add(10.1,20.1);
    return 0;
}

3.

改变变量参数

#include<iostream>
using namespace std;
int Add(int a=10,int b=20)
{
    return a+b;
}
int Add(int a=10)
{
    return a+b;
}
int main()
{
    Add(10,20);
    Add(10);
    return 0;
}

7.引用

7.1引用概念

类型&对象名=引用实体;

如:

int & re=a;

注意:引用类型必须与对象是同种类型

特性:

1.一个对象可以有多个引用(别名),且都指向他。

2.引用指向的对象不能改变,且一定有赋初值。

7.2常引用

const int &a=10;
//int &ra=a;//a为常量
const int &re=a;
//int &e=10;
const int &e=10;

const int &e=10;

7.3使用场景

1.做参数(交换值)

void Swap(int& a,int& b )
{
   int temp=a;
    a=b;
    b=temp;
}
int main()
{
    int a=10,b=20;
    Swap(a,b);
    cout<<a<<" "<<b;
    return 0;
}

2.返回值

仅仅了解即可,知道能这样用:

返回值只可为:全局变量/静态变量、堆空间等的数据。

struct SLNode
{
    int *ret;
    int data;
    int size;
    void INT()//初始化
    {
        ret=(int*)malloc(sizeof(int)*4);
        size=4;
        data=0;
    }
    void PushBack(int x)//入值
    {
        //扩容...
        ret[data++]=x;
      
    }
    int& Get(int x)//取值
    {
        assert(ret);
        return ret[x];
    }
};

int main()
{
  SLNode sl;
  sl.INT();
  sl.PushBack(1);
  sl.PushBack(2);
  sl.PushBack(3);
  sl.PushBack(4);
  for(int i=0;i<sl.size;i++)
  {
   if(sl.ret[i]%2==0)
    {
        sl.Get(i)*=2;
    }
    cout<<sl.ret[i]<<" ";
  }
}

7.4引用与指针的区别

在语法上:

1.引用只是别名,没有开辟空间,指针存放地址,开辟空间。

2.引用需要赋初值,指针没要求

3.引用指向对象后不能更改,指针可以改变指向

4.引用没有NULL

5.引用+1是对象+1,指针是 地址后移一位

6.sizeof含义不同,引用时类型的大小,指针是地址空间字节数

7.有多级指针,没有多级引用

在底层:

引用的底层是指针实现的,有开辟空间。

8.内联函数

想必在c语言阶端已经堆宏函数的麻烦受不了,在c++中也不会在想受其苦难了吧,那么现在开始感谢我们伟大的c++祖师爷本贾尼.斯特劳斯特卢普,以inline修饰的函数叫做内联函数,编译时会在调用内联函数的地方展开,没有函数调用建立栈帧的开销

8.1模型

inline int Add(int a,int b)
{
    return a+b;
}
int main()
{
    int ret=Add(1,2);
    cout<<ret;
    return 0;
}

8.2特性

1.inine是一种空间换时间的做法,其缺点也很明了:可能使目标文件变大,优势:少了调用的开销、效率提升等。

2.inline对于编译器只是一个建议,不同编译器关于inline实现机制有所不同,在函数规模较小,不是递归,且频繁调用的函数采用。

3.inline不建议声明与定义分离,因为inline展开就没有函数地址了,链接就找不到。

宏的优缺点? 

优点:

1.增强代码复用性。

2.提高性能

缺点:

1.维护差,可读差,误用率高。

2.不方便调用宏

3.没有类型检查

两者优点各异,自行选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值