C++基础笔记

1基础框架

#include<iostream>  //头文件
using namespace std;    //std标准命名空间
int main()
{
     cout<<"Hello world!!!"<<endl;   //标准输出  endl表示换行
     return 0;
}

(较C语言d的好处:输入输出不需要控制格式,例如:整型%d,字符型%c。)

标准输入cin 遇到空格、tab或者换行符作为分隔符

       例 

char arr[10];

cin>>arr;   //输入hello world时

cout<<arr<<endl; //输出为hello

2缺省参数

//缺省参数
#include<iostream>

using namespace std;

//这儿的0就相当于缺省参数,如果实参什么都没传过来,缺省参数就赋值给a,相当于备胎的意思。
void func(int a = 0)
{
	cout << a << endl;
}

int main()
{
	func(10);
	func();  //在c语言中这样写肯定是不行的,但是在c++中有了缺省参数,如果你什么都不传,只要你前面有缺省参数的存在,就能过。
	return 0;
}

(1)全缺省(即函数的全部形参都设置为缺省参数)

//全缺省
#include<iostream>
using namespace std;

void func(int a = 0, int b = 1, int c = 2)
{
	cout <<"a="<< a << endl;
	cout << b << endl;
	cout << c << endl;
}

int main()
{
	func();
	return 0;
}

(2)半缺省参数 (必须从右往左依此给出!!)

//错误示例
void func(int a, int b = 2, int c)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}


//正确示例
void func(int a, int b = 2, int c=0)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

(3)缺省值必须是常量或者全局变量

//正确示例
int x = 3;//全局变量
void func(int a, int b = 2, int c = x)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

(4)缺省参数不能在函数声明和定义中同时出现

//错误示例
//test.h
void func(int a, int b, int c = 3);
//test.c
void func(int a, int b, int c = 2)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

3函数重载

c++中,可在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同。

#include <iostream>
using namespace std;

int Add(int x, int y)
{
	return x + y;
}

double Add(double x, double y)
{
	return x + y;
}
int main()
{
	cout << Add(0,1) << endl;//打印0+1的结果
	cout << Add(1.1,2.2) << endl;//打印1.1+2.2的结果
	return 0;
}

(若仅仅是返回值不同,其他都相同,则不构成函数重载)

short Add(short left, short right) 
{
    return left+right; 
}
int Add(short left, short right) 
{
    return left+right; 
}

4引用

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。对引用的操作与对变量直接操作完全一样。

引用的声明:类型标识符  &引用名=目标变量名;

(1)引用在定义时必须初始化

(2)一个变量可以有多个引用

//可行
int a = 10;
int& b = a;
int& c = a;
int& d = a;

(3)引用一旦引用了一个实体,就不能再引用其他实体

(4)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名

常引用  声明方式:const 类型标识符 &引用名=目标变量名

void TestConstRef()
{
 const int a = 10; 
 //int& ra = a; // 该语句编译时会出错,a为常量
 const int& ra = a; //正确
 // int& b = 10; // 该语句编译时会出错,b为常量
 const int& b = 10;  //正确
 double d = 12.34;
 //int& rd = d; // 该语句编译时会出错,类型不同
 const int& rd = d;   //正确
 }

将不可修改的量用可读可写的量来引用是不可以的,但是反过来是可以的,将可读可写的量用只可读的量来引用是可以的!

引用的作用:

1.引用作为参数   

//交换函数
void Swap(int& a, int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}

与指针相比:

1)引用在定义时必须初始化,指针没有要求。
2)引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体。
3)没有NULL引用,但有NULL指针。
4)在sizeof中的含义不同:引用的结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节)。
5)引用进行自增操作就相当于实体增加1,而指针进行自增操作是指针向后偏移一个类型的大小。
6)有多级指针,但是没有多级引用。
7)访问实体的方式不同,指针需要显示解引用,而引用是编译器自己处理。
8)引用比指针使用起来相对更安全。

2.引用作为返回值

(1)以引用返回函数值,定义函数时需要在函数名前加&

(2)用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。

因为在函数内部定义的普通的局部变量会随着函数调用的结束而被销毁,所以返回的数据必须是被static修饰或者是动态开辟的或者是全局变量等不会随着函数调用的结束而被销毁的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nuo__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值