C++基础(一)

考研结束,发现c++忘了很多,甚至想不起来怎么定义一个类,抽空重新看一遍,做一些记录

输入输出cin、cout:

cout<<"asd"<<endl;//输出
cin>>a;//从键盘输出到a,注意无需格式说明符

命名空间namespace:

使用

using std::cout;//方法一
using std::endl;
//或者
using namespace std;//方法二
//或者
std::cout<<"asd"<<std::endl;//方法三

自定义命名空间:

#include <iostream>
using namespace std;
namespace space_A {
	int a = 10;
}

namespace space_B {
	int a = 10;
	namespace space_C {
		struct Person_t
		{
			int id;
			int age;
			char name[64];
		};
	}
}

int main()
{
	space_B::space_C::Person_t p;
	p.id = 1;
	cout << p.id;
}

C++对C的增强

1、变量增加了对全局变量的重定义检测
int g_val; //bss段
int g_val = 1; //data段

上述代码在c中可以运行,但是在c++中会报错

2、struct在使用时候可以不写struct关键字
#include <iostream>
using namespace std;
struct MyStruct
{
	int a;
};

int main()
{
	MyStruct m;
	//在c中,必须加上关键字:struct MyStruct m;
	//或者用typedef重命名
	m.a = 1;
	return 0;
}
3、所有的变量,函数都必须有类型
//在c中可以运行,但是c++中不可以
f()//f()必须加上类型int
{
	return 10;
}
int main()
{
	f();
	return 0;
}
4、对函数参数个数严格匹配
//c中能编译通过,但是会报警告:实参太多
//c++中不能通过,报错误:实参太多
int f(int a)
{
	return 10;
}
int main()
{
	f(10,20,30,40);
	return 0;
}
5、增加了对bool的支持

注意几点:
true对应1,flase对应0。且bool类型的变量可以被赋值整型,不管怎么赋值,都只能取0或者1。
例如:

bool a_flag=true;
a_flag = 10;//此时a_flag仍然为1,表示true
a_flag = -10;//此时a_flag仍然为1,表示true
a_flag = 0;//此时a_flag为0,表示false
6、加强三目运算符:三目运算符可以作为左值
#include <iostream>
using namespace std;

int main()
{
	int a=10, b=20;
	(a > b ? a : b)=50;  //c中会报错,c++不报错
	*(a > b ? &a : &b)=50;  //c中正确写法
	cout << "a:" << a << "  b:" << b << endl;
	return 0;
}
7、加强const

先提一下const 的用法:

int main()
{
	int const a=10;
	const int b=10;//这两个相同,都表示一个常量
		
	const int *pa;//pa为 const int类型的指针(指针可以改,所指的内容不可以改)
	int *const pb;//pb为 int类型的const指针(指针不可改,所指的内容可以改)
	const int *const pc;//pc 为const int类型的const指针(指针不可改,所指内容也不可改)
	....
}

c语言中,const弊端——可以被指针所修改,根本原因是因为,执行int const a=10;的时候,会在栈上开辟空间,既然有内存空间了,就可以用指针指向这片空间,然后进行修改。

int const a=10;
int *p = &a;
*p = 70;
int array[a];//(c中会报错,c++不会)a可修改,因此无法通过a来定义数组长度

c++中修复了这个问题,当遇到const int a时,会生成key-value对,储存在常量区里面,固定不可修改,并因此这个const a没有在栈上开辟内存空间,也就无法用指针进行修改
当遇到&a时候,编译器会临时在栈上开辟一个空间用来存放a的值,这个空间和a本身没有关系,从而使得指针无法修改a的值

8、修复枚举enum
//c语言可以这么写
enum season a = 0;
if(a==0)
{
	//...
}

C语言中的弊端:当枚举个数过多时候,数字不便于区分,因此在c++中,将枚举的数字表示去除了。即枚举只能赋值为枚举

C++的拓展——引用

1、引用的定义

引用可以理解为一个变量的别名,一定要初始化

1、声明的时候必须初始化,一经声明则不可更改
2、可对引用再次引用,无限套娃
3、引用类型不分配内存
4、在定义的时候,&表示引用而不是取地址

int a=10;
int &re = a;//声明re为a的引用
re=20;
cout<<a<<endl;
2、引用的本质

首先来看这样几个概念

1、引用所占用的空间与指针一样大
2、引用在声明的时候必须初始化,这与const一致
3、引用关系在定义后就不可更改,而引用的内容可以更改,这与const * 一致

基于这两点,合理怀疑:引用本质上是一个const指针,即常指针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值