C++基础知识1

C++基础知识1

原文链接(点击原文链接获取更多学习干货):
http://blog.bools.cn/archives/1346

一、c++类型打印c语言

#include<iostream>
using namespace std;
int main()
{
	cout << "hello world" << 1245 << endl;
	system("pause");
	return 0;


}

注意:

1、#include是标准的输入输出流,in是输入,out是输出,cout输出就包含在这个头文件里面

2、using namespace std;这是为了创建一个空间std来存放内容,如果不写这行代码,可以用以下方法来代替:

std::cout<<“hello world”<<12345<<std::endl

3、cout是c++里面用到的输出模式,和printf一样。

4、<<左移运算符在这里做拼接的作用。

5、endl是结束换行的意思,和\n效果相同。

6、 system(“pause”);起到的是阻塞作用,如果不加这行代码,编译后的效果将是一闪而过,不会停留在那个编译页面。

二、面向对象的三大特性

1、封装

2、继承

3、多态
三、双冒号::的作用

双冒号是 作用域运算符 ::全局作用域,

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

int atk = 200;
void test01()
{
	int atk = 100;

```c++
cout << "攻击力为 : " << atk << endl;
cout << "全局攻击力为 : " << ::atk << endl;//如果这样写那么打印出来的的是200

}

int main(){

test01();

system("pause");
return EXIT_SUCCESS;

}


三、**c++相比较c语言的增强**

1、全局变量检测增强

即不能重复定义听一个变量



int a;

int a=10;
```**//报错**

2、函数检测增强

即必须定义变量的类型

void using(int a,int b)

{

return a*b;

}

3、struct内可以增加函数

struct Person

{

int m_age;

void m _plus();//这样不会报错,但c语言中就会报错

}

void test()

{

Person p1;//不加struct关键字不会报错



}

4、三目运算符增强

#include<iostream>
using namespace std;
void my_in()
{
	int a = 10;
	int b = 20;
	(a > b ? a : b)=100;
	cout << a  <<endl<< b << endl;

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

注意:

c++中三目运算符传递出来的是变量b,所以打印出来的结果是b=100

5、const的增强

#include<iostream>
using namespace std;
void test05()
{
	const int b = 10;
	int* p = (int*)&b;
	*p = 100;
	cout << "*p=" << *p << endl;
	cout << "b=" << b << endl;

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

注意:

输出的结果是*p=100;b=10。这是因为在c++中,const不会给b新开辟一个空间,所以指针无发通过空间去修改他的那个值。

const分配内存情况

1、加地址符号会增加一个临时内存,但是无法修改,如上。

2、添加extern编译器会给const变量分配内存。

void test01()
{
	extern const int m_A = 10;
	int * p = (int*)&m_A; 

}

3、用普通变量初始化const

void test02()
{
	int a = 10;
	const int b = a; 

	int * p = (int *) &b;
	*p = 1000;

cout<<"b="<<b<<endl;

}

int main()

{

test02;

return 0;

}

结果为b=1000;

总结:用const去替代#define

namespace的使用

1、namespace命名空间,主要使用来解决命名冲突的问题

当多个文件编程时,命名起冲突,这个时候就要用到namespace

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include "game1.h"
#include "game2.h"
void test01()
{
	LOL::goAtk();
	KingGlory::goAtk();
}

文件1头文件:

#include<iosteam>

using namespace std;

namespace LOL

{

 void gostck();命名

}

文件1源文件:

#include<game1.h>

void LOL::stck()

{

 cout <<"LOL攻击实现"<<endl;

}

注意:

需要用作用域符号去连接,意思是LOL作用域下的stck

2、命名空间下可以放函数、变量、结构体、类

3、命名空间必须定义在全局作用域下,不能放在主函数里面定义

3、命名空间可以嵌套命名空间,即在一个空间里面你可以在命名一个空间

namespace A

{

namespace B

{

int m_A=10;

}

}

void test()

{

cout <<"作用域B下的m_A的值:"<<A::B::m_A<<endl

}

注意:

A::B::m_A,打印的时候就必须这样层层说明,意思就是A作用域下的B作用域下的m_A。

4、命名空间是开放的,可以随时网原先的空间添加内容,意思就是前面定义了A,后面在定义一个A不会覆盖前面的A,只会添加进前面那个A里面。

5、可以定义无名的命名空间

namespace

{

int m_b=10;

}

注意:

无名命名空间,相当于static int m_b=10;,意思是只能在当前文件内使用

6、命名空间可以起别名

namespace A

{

int m_c=10;

}

void test01()

{

namespace B=namespace A;

cout <<A::m_c<<B::m_c<<endl;

}

这样子打印的话两个值将会相同

四、using的使用

1、using用于声明

#include<iostream>
using namespace std;
namespace A
{
	int m = 10;

}
namespace B
{
	int m = 20;
}
void test01()
{


	using A::m;
	cout << m << endl;

}
int main()
{
	test01();
	system("pause");
	return 0;
}

注意:

用using声明要注意二义性,即如果前面已经定义了想通一个变量名,就会报错。

2、using编译指令

#include<iostream>
using namespace std;
namespace A
{
	int m = 10;

}
namespace B
{
	int m = 20;
}
void test01()
{


	using namespace A;
	using namespace B;
	cout << A::m << endl;

}
int main()
{
	test01();
	system("pause");
	return 0;
}

注意:

using namespace A;这是指打开A空间里面,用里面的值,但是也要注意二义性,因为当打开多个空间时,就要在输出那里注明是那个作用域下的值。

五、参数的传递

1、值传递

2、地址传递(利用引用来实现)

(以前都是通过指针来实现)

#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
	int temp = a;
	a =b;
	b =temp;
}
void text05()
{
	int a = 10;
	int b = 20;
	swap(a, b);
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;

}
int main()
{
	text05();
	system("pause");
	return 0;
		
}

注意事项:

1、不要返回局部变量的值

int& dowork()
{
	int a = 10;
	return a;
}
void text08()
{
	int& ret = dowork();
	cout << "ret=" << ret << endl;
	cout << "ret=" << ret << endl;
	cout << "ret=" << ret << endl;
}
int main()
{
	//text05();
	text08();
	system("pause");
	return 0;
		
}

结果就是,第一次是正确的,但是后面几次打印都是乱码。

2、如果函数的返回值是引用,那么这个函数调用可以作为左值

dowork2() = 1000; //相当于写了 a = 1000;

欢迎关注技术公众号,获取更多软件学习干货!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值