C++入门基础知识

本文介绍了C++的基础知识,包括命名空间的作用及访问方式,C++基本输入输出流如cout和cin的使用,函数重载的概念及其在C与C++的区别,C++中的缺省参数以及指针和引用的详细讲解,特别是引用作为变量别名的特性及其用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 命名空间
  1. 作用: 实际上就是一个由程序设计者命名的内存区,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。
  2. 访问方法:用 作用域解析符:: 来访问,AA : : x,AA表示空间域,x表示成员(名字)。
    namespace AA1//AA1域(空间)
    {
        int a = 1;//成员
    }
    namespace AA2
    {
        int a = 2;
    }
    int a = 3;
    int main()
    {
        int a = 4;
        cout<<a<<end1;//输出4,就近原则
        cout<<::a<<end1;//3,全局变量,域缺省时,表示全局域
        cout<<AA1::a<<end1;//1, 
        cout<<AA2::a<<end1;//2,
    }
2. C++的基本输入输出流。

cout是标准输出流对象,<< 是输出操作符;
cin是标准输入流对象,>>是输入操作符;
endl是换行操作符;
他们都属于C++标准库,所以都在std的名字空间里面。
1. C++怎么控制double等浮点类型的输出位数吗?
2. 怎么控制输出一个数字的八进制和16进制吗?
这里写图片描述

3. 重载
  1. 什么事函数重载:在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同/类型不同),返回值可同可不同
  2. 为什么C语言不支持重载,而C++支持:例如函数:void function(int x, int y)
    在C语言中,经过编译器编译后,库中的名字为 _function
    而在C++中,经编译器编译后,库中的名字为_function_int_int, 即C++函数参数不同,函数名不同的函数在库中定义的函数名就不同。(与返回值无关)。
// _Z12OverloadFuncid
void OverloadFunc (int x, double d)
{}
// _Z12OverloadFuncdi
void OverloadFunc (double x, int d)
4. C++缺省参数
// 全缺省参数
int Add1 (int a = 10, int b = 20)
{
    return a + b;
}
// 半缺省参数
int Add2 (int a, int b = 30)
{
    return a + b;
}
////错误缺省参数
//int Add3 (int a = 40, int b)
//{
//  return a + b;
//}
void Test ()
{
    Add1();//结果:30
    Add1(1);//21
    Add1(1,1);//2
    Add2(2);//32
    Add2(2,2);//22
}
5. 指针和引用
 指针我们在C语言中已经有所了解,就不用啰嗦,我们只看引用,和指针做比较

1. 引用的概念:
引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名
2. 定义的格式为:
类型 &引用变量名 = 已定义过的变量名;
3. 引用的特点:
- 一个变量可取多个别名
- 引用必须初始化
- 引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。
4. 使用方法:

void TestReference1 ()
{
int a = 1;
int& b = a;
cout<<"a:address->" <<&a<< endl;
cout<<"b:address->" <<&b<< endl;
a = 2;
b = 3;
int& c = b; // 引用一个引用变量,别名的别名
c = 4;
}
  1. 做参数:
//【引用传递】如果形参为引用类型,则形参是实参的别名。
void Swap (int& left, int& right)
{
int temp = left;
right = left ;
left = temp ;
}//会改变实参的值
//测试值传递/引用传递的效率
struct BigData
{
    int array [1000];
};
void DealBigData (BigData& x)//35
{
    x.array [0]= 0;
    x.array [1]= 1;
    x.array [2]= 2;
}
void DealBigData (Bigdata x)//125
{
}
#include <Windows.h>
void TestReference3 ()
{
    BigData bd ;
    int begin = GetTickCount ();
    for (int i = 0; i < 1000000; ++i )
    {
        DealBigData(bd );//125
    }
    int end = GetTickCount ();
    cout<<"cost time:" <<end - begin<<endl ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值