C++学习笔记(1)(黑马程序员、菜鸟教程)

C++的特性

Bjarne Stroustrup博士在C语言地基础上引入并扩充了面向对象地概念,发明了一种新的程序语言,C++(面向对象,具有较强的抽象和建模能力)。

四大特性:封装、抽象、继承和多态。

1、输入和输出、命名空间(std cin cout)

#include <iostream>
//命名空间
using namespace std;

int main(void)
{
	//cout就是黑屏幕
	cout << "hello world" << endl;
	return 0;
}
#include <iostream>

//iostream 提供一个叫命名空间的东西,标准的命名空间是 std

//方式二:
using std::cout;//声明命名空间中的一个变量
using std::endl;

int main(void)
{
	//方式一
	std::cout << "hello world" << std::endl;
	std::cout << "goodbye world" << std::endl;
	return 0;
}

键盘输入一个a的值,再把a打印出来。

int main(void)
{
	int a = 0;
	
	cout << "hello world" << endl;
	
	cin >> a;//从键盘输入一个数据,给a

	cout << "a= " << a << endl;
	//"a="为字符串,后面的a为整型
	return 0;
}

命名空间:作用域,区分相同名称的不同作用范围。

namespace AAA {

}

命名空间的三种方式

#include <iostream>

//方式二:
#if 0
using std::cout;//声明命名空间中的一个变量
using std::endl;
using std::cin;
//至此,方式二也开始麻烦起来了
#endif

//方式三
using namespace std;
int main(void)
{
#if 0
	//方式一
	std::cout << "hello world" << std::endl;
	std::cout << "goodbye world" << std::endl;
	return 0;
#endif
	int a = 0;
	cout << "hello world" << endl;

	cin >> a;//从键盘输入一个数据,给a

	cout << "a= " << a << endl;
	return 0;
}

定义一个命名空间:(套娃,更好理解)

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;

//定义一个命名空间
namespace spaceA
{
	int g_a = 10;
}

namespace spaceB
{
	int a = 20;
	namespace spaceC
	{
		struct teacher//定义一个teacher变量
		{
			int id;//定义一个整型
			char name[64];//定义了一个字符串
		};
	}
	namespace spaceD
	{
		struct teacher//定义一个teacher变量
		{
			int id;//定义一个整型
			char name[64];//定义了一个字符串
		};
	}

}
int main(void)
{
	//using spaceA::g_a;
	using namespace spaceA;
	cout << g_a << endl;

	//spaceB::spaceC::teacher t1;
	
	//using spaceB::spaceC::teacher;
	
	//teacher t1;

	//using namespace spaceB::spaceC;
	spaceB::spaceC::teacher t1;



	t1.id = 10;

	spaceB::spaceD::teacher t2;
	t2.id = 20;

	return 0;
}

 C++ 命名空间 | 菜鸟教程

2、三目运算符、const增强

a = 50,意味着把50赋值给a,

在C++中,三目运算符可以当左值。因为C++中返回的是别名(引用/变量本身),而不是变量的值,所以可以当左值。

int a=10;
int b=20;
(a<b)?a:b;//如果a<b,则取a;否则取b;
c=(a<b)?a:b;//把取到的值赋给c
((a<b)?a:b)=50;//则此时a=50,即三目运算符可以当左值

const int a, int const a 在C语言中都表示a是一个常量,在栈里面表示不可修改了;在C++中依然需要初始化。

const int *c  表示一个指向长整型数的指针(其中所指向的内存数据不可修改,但本身可以修改)

int * const d  常指针(指针变量不能被修改,但所指向的内存空间可以被修改)

const在int左边表示修饰变量,在int右边表示修饰指针,就看const后面是谁就行。

const int *const e  e表示一个指向长整型的常指针(指针和它所指向的内存空间,均不能被修改)

C++中的const

const int a=10;

符号表
keyvalue
a10

int *p=(int*)&a;如果对一个常量取地址,编译器会临时开辟一个空间temp,让这个指针存放这个临时空间的地址。

void test5()
{
    const int a = 10;//a是真正的常量
    int *p = (int*)&a;
    *p = 20;//改变的是临时开辟的temp变量
    
    cout <<"a=" << a <<endl;
    cout <<"*p=" << *p <<endl;

    int array[a] = { 0 };

}

3、引用

 1、引用没有定义,是一种关系型声明声明和它原有某一变量(实体)的关系。故而类型与原类型保持一致,且不分配内存。与被引用的变量有相同的地址。

2、声明的时候必须初始化,一经声明,不可变更。(即创建时引用被初始化为一个对象,就不能被指向到另一个对象。指针可以指向到另一个对象)

3、可对引用,再次引用。多次引用的结果是某一变量具有多个别名。

4、&符号前有数据类型时,是引用。其它皆为取地址。

C++ 引用 | 菜鸟教程

可把引用作为参数,也可把引用作为返回值。通过使用引用来代替指针,会使C++程序更容易阅读和维护。

把引用作为参数示例:

#include <iostream>
using namespace std;

//函数声明
void swap(int& x, int& y);

int main()
{
	//局部变量声明
	int a = 100;
	int b = 200;

	cout << "交换前a的值:" << a << endl;
	cout << "交换前b的值:" << b << endl;

	//调用函数来交换值
	swap(a, b);

	cout << "交换后a的值:" << a << endl;
	cout << "交换后b的值:" << b << endl;

	return 0;

}


//函数定义
void swap(int& x, int& y)
//当我们将引用作为函数参数传递的时候,编译器会替我们将实参取地址给引用
{
	int temp;
    //对一个引用操作赋值的时候,编译器会替我们隐藏*操作
	temp = x;//保存地址x的值
	x = y;//把y赋值给x
	y = temp;//把x赋值给y

	return;
}

//当研究引用时,可以把引用当作一个常指针去研究。
//当在使用引用编程时,可以把引用理解为变量的别名。

引用如果当函数返回值的话,可以当左值。引用作为返回值,不要返回局部变量的引用,因为局部变量的地址会被返回,但局部变量的内存空间会被释放。

c++中将局部变量的引用作为返回_haohulala的博客-CSDN博客_c++ 返回局部变量的引用

const引用:对常量进行引用,要加const(const int & a=10;)

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;

int main(void)
{
	const int a = 10;//如果想对一个常量进行引用,必须是一个const引用

	const int& re = a;//此时re的值是不可修改的,a是可以修改的

	int b = 20;
	const int& re2 = b;//相反,如果一个普通变量,用一个const引用接收是可以的

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

	b = 30;
	cout << "b=" << b << endl;
	cout << "re2=" << re2 << endl;


	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值