C到C++笔记记录

发布时间:2023年12月19日

输入(cin) and 输出(cout)

#include<iostream>

using namespace std;

void main()
{
	int i;
	//输入 cin
	cin >> i;
	//输出 cout
	cout << i << endl;
	system("pause");//暂停窗口
}

bool

bool b = true (表示真)
bool b = false (表示假)3

内联(inline)

(PS:调用函数复杂度的高的不推荐使用内联操作)
1.避免重复调用函数(PS:类似递归操作)
2.牺牲空间 换取高效率
3.写了inline关键字不代表一定会按照内联的运行方式去运行(简单说鸡肋)

(PS:内联的运行方式:简单说 无需重新申请 调用函数,可以直接调用函数)
在这里插入图片描述
在这里插入图片描述

重载

  • (1)重载解释:
    1.同一个作用域 函数名相同 参数不同的函数
    (PS:两个函数名字一样,但是里面所带的参数类型不一样)
    2.重载和返回类型无关
    (PS:重载与函数类型没有关系,不论是函数类型相同不相同。只要函数名相同 参数相同 则不能重载)
    3.重载遵守临近隐藏原则
    (PS:相同函数名或变量名,优先调用距离最近一次声明的函数和变量)
  • (2)可以重载的要求:
    2.参数 个数 不一样 可以重载
    3.参数 顺序 不一样 可以重载
    4.参数 类型 不一样 可以重载

缺省函数

  • 缺省函数解释:
    ??写函数参数时定义 形参的默认值,当 实参 传入时 没有变量 ,则使用 形参默认值 代替实参
    (PS:为函数指定 默认值,调用时若未提供实参,则对应位置的形参用默认值代替)
  • 使用要求:
    1.缺省参数必须从 右边第一个参数 开始定义
    2.禁止声明和定义时同时指定缺省参数(PS:最好在声明时指定缺省参数 )
    3.缺省参数禁止在重载时使用(会造成重载歧义)

源码

#include<iostream>
#include<stdlib.h>
using namespace std;

void fun(char a = 'w',char b = 's' ){
	cout << "Worl"<< a  << b  << endl;
}
void main()
{
	fun();//无参时输出'Worlws'
	fun('d','s');//传参时输出'Worlds'
	system("pause");
}

运行结果:

Worlws
Worlds
请按任意键继续. . .

哑元

  • 哑元解释:
    ??将 形参变量名 删除,只有函数类型称为 哑元 。当形参变量被删除时函数内变量会停止使用(详细看源码)
  • 哑元用处:
    1.可以用来占形参位置
    2.兼容老版本
    3.形成函数重载
    源码
#include<iostream>
#include<stdlib.h>
using namespace std;
//将 a 进行注释后,a 不会被传参传入
void fun(char /*a = 'w'*/,char b = 's' ){
	cout << "Worl"<< a  << b  << endl;
}
void main()
{
	fun();//无参时输出'Worls'
	fun('d','w');//传参时输出'Worls'
	system("pause");
}

运行结果:

Worls
Worls
请按任意键继续. . .

引用(&)

  • 引用解释:
    ??引用相当于给变量取别名,对引用的操作相当于直接影响变量(PS:与C语言中指针用法差不多,但是引用就相当于一个别名。)

  • 引用注意事项:
    1.引用是一对一的,地址不变,值能变(但是能改变值);
    2.引用必须初始化 and 不能为空
    3.引用做参数 形参就相当于实参
    4.引用不额外占用内存

#include<iostream>
#include<string>

using namespace std;
//取最大值
int Max(int& a, int b)
{
	
	a = 2;//改变引用形参的值(此时改变会影响实参)
	b = 5;//改变形参的值(此时改变并不影响实参)
	return a > b ?  a: b;
}
int& Add(int &a)
{
	return ++a;
}
void main()
{

	//1. 引用是一对一的,地址不变,值能变(但是能改变值);
	int a = 18;
	int &function = a;
	cout << "改变前的地址" << &function << endl;

	function = Add(a);
	cout << "改变后的地址" << &function << endl;
	cout << "Add:" << function << endl;
	int test = 30;

	//2. 引用必须初始化 and 不能为空
	//初始化
	int &t = test;
	t = 40;//改变所引用的值
	cout << "&t=" << t << endl;//打印 &t 变量值
	cout << "test=" << test << endl;//打印 test 变量值
	cout << "&t 地址:" << &t << endl;//打印 &t 地址
	cout << "test 地址:" << &test << endl;//打印 test 地址

	//3. 引用做参数 形参就相当于实参
	int s = 30;
	//获取最大值
	cout << "Max:" << Max(s, t) << endl;
	//当引用作为参数 其实参也会随之改变
	cout << "改变后的值:" << s << "未改变的值:" << t << endl;

	system("pause");
}

C++动态内存分配

  • C++动态内存分配解释:
    1.C++动态内存分配关键词:new and delete
    2.动态内存分配解释参考C语言:C_顺序表(动态数组插入)

  • C++动态内存分配操作:
    1.使用new / delete操作符
    2.内存分配的同时初始化
    3.动态内存分配数组
    4.内存分配失败,抛出bad_alloc异常

#include<iostream>
#include<string>

using namespace std;
//取最大值
void main()
{
	//1.使用new / delete操作符
	//(PS:初始化后如果不进行赋值将变成野指针)
	int* p1 = new int;
	*p1 = 123;
	cout << *p1 << endl;
	delete p1;
	p1 = NULL;

	//2.内存分配的同时初始化
	int* p2 = new int(20);
	cout << *p2 << endl;
	delete p2;
	p2 = NULL;

	//3.动态内存分配数组
	int* arr = new int[4];
	for (int i = 0; i < 4; ++i)
	{
		arr[i] = i;
		cout << arr[i]<<" ";
	}
	cout << endl;
	delete[] arr;//删除时需要带[]
	arr = NULL;

	//动态内存分配数组的同时初始化
	int* brr = new int[4]{1,3,5,9};
	for (int i = 0; i < 4; ++i)
	{
		cout << brr[i] << " ";
	}
	cout << endl;
	delete[] brr;//删除时需要带[]
	brr = NULL;

	system("pause");
}

笔记扩充:

  1. Windows PowerShell 中指令
关键词注释
g++编译源代码
g++ -c以二进制形式编译c++文件
nm以二进制形式读取文件

效果图:
在这里插入图片描述
2.在C++里使用C语言形式方法:
(参考文章:C++关键字extern的使用)

extern 外部声明

  • 例子:extern “C” void func(int a);
    ??这句话就是告诉编译器,在编译 func 函数名时,按着 C 的规则去翻译相应的函数名,而不是 按C++ 的方式。这个功能十分有用处,因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的,为了更好的支持原来的C代码和已经写好的C语言库,需要在C++中尽可能的支持C,而extern "C"就是其中的一个策略。
  • 这个功能主要用在下面的情况:
    1.C++代码调用C语言代码
    2.在多个人协同开发时,可能有的人比较擅长C语言,而有的人擅长C++,这样的情况下也会有用到

源码

#include<iostream>
#include<stdlib.h>
using namespace std;

//C语言 形式打印
extern "C"
{
	void fun()
	{
		printf("Hello\n");
	}
}
//C++ 形式打印
void fun(char a ){
	cout << "Worl"<< a  << endl;
}
void main()
{
	fun();
	fun('d');
	system("pause");
}
文章来源:https://blog.csdn.net/ciao_21/article/details/135051645
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。