C到C++笔记记录
2023-12-19 21:19:37
输入(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");
}
笔记扩充:
- 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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!