结合举例代码,快速理解使用C++语法…
cout输出cin是键盘输入
//i input 输入 o output输出 stream流 输入输出流头文件(类似stdio.h)
2 #include <iostream>
3
4 //std(标准) 使用标准的命名空间using namespace std;//命名空间,此标识符作为此组群的名字
5 using namespace std;
6
7 //有且只有一个主函数 可以有多个其他函数
8 int main(int argc, char *argv[])
9 {
10 //cout 输出 类似 c语言的printf
11 //endl 类似 c语言的 换行符
12 // printf("Hello 你好!\n");
13
14 //cout代表的输出设备
15 cout << "Hello 你好!" << endl;//将字符串输出到 控制台
16
17 //cin代表的是输入设备
18 int num =0;
19 cin >> num;//将建键盘输入的数据 赋值给 num
20 cout<<"num = "<<num<<endl;
21
22 return 0;
23 }
使用标准的命名空间std,std中所有成员名 可以直接使用,cout endl cin都是命名空间std的成员
#include
using namespace std;
int main(int argc, char *argv[])
{
std::cout << "Hello World!" << std::endl;
cout << "Hello World!" << endl;
return 0;
}
表明数据归属性,
using namespace std;
2 int a = 10;//全局变量
3 void main()
4 {
5 int a = 20;//局部变量
6 cout<<"局部变量a = "<<a<<endl;//优先选择局部变量
7
8 //::作用域运算符(c++独有)
9 cout<<"全局变量a = "<<::a<<endl;//取全局变量
10 }`
类似于C语言中的类定义,解决命名冲突;(快速开发,方便移植)
1 //定义一个名字为A的命名空间(变量、函数)
2 namespace A {
3 int a = 100;
4 }
5 namespace B {
6 int a = 200;
7 }
8 void main()
9 {
10 //A::a a是属于A中
11 cout<<"A中a = "<<A::a<<endl;//100
12 cout<<"B中a = "<<B::a<<endl;//200
13 }
1 namespace A {
2 int a = 1000;
3 namespace B {
4 int a = 2000;
5 }
6 }
7 void main()
8 {
9 cout<<"A中的a = "<<A::a<<endl; //1000
10 cout<<"B中的a = "<<A::B::a<<endl; //2000
11 }
即可以随时把新的成员加入已有的命名空间中(常用)
namespace A{
int a = 100;
}
namespace A{
int c = 200;
}
int main()
{
cout<<"a="<<A::a<<endl;
cout<<"c="<<A::c<<endl;
return 0;
}
1 namespace A {
2 int a=100;//变量
3
4 void func()//函数
5 {
6 cout<<"func遍历a = "<<a<<endl;
7 }
8 }
9 int main()
10 {
11 //变量的使用
12 cout<<"A中的a = "<<A::a<<endl;
13
14 //函数的使用
15 A::func();
16 }
namespace A {
2 int a=100;//变量
3
4 void func();
5 }
6
7 void A::func()//成员函数 在外部定义的时候 记得加作用域
8 {
9 //访问命名空间的数据不用加作用域
10 cout<<"func遍历a = "<<a<<endl;
11 }
12
13 void funb()//普通函数
14 {
15 cout<<"funb遍历a = "<<A::a<<endl;
16 }
17 int main()
18 {
19 A::func();
20 funb();
21 }
意味着命名空间中的标识符只能在本文件内访问,相当于给这个标识
符加上了static,使得其可以作为内部连接
1 namespace {
2 int a=100;//变量
3
4 void func()//函数
5 {
6 cout<<"holle world"<<a<<endl;
7 }
8 }
9 int main()
10 {
11 //变量的使用
12 cout<<"A中的a = "<<A::a<<endl;
13
14 //函数的使用
15 func();
16 }
namespace veryLongName{
2
3 int a = 10;
4 void func(){ cout << "hello namespace" << endl; }
5
6 }
7
8 int main()
{
9 namespace shortName = veryLongName;
10 cout << "veryLongName::a : " << shortName::a << endl;
11 veryLongName::func();
12 shortName::func();
13 }
using 使用命名空间
1 namespace veryLongName {
2 int a=100;
3 void func(){cout<<"hello namespace"<<endl;}
4 }
5 int main()
6 {
8 //使用veryLongName命名空间
9 using namespace veryLongName;
10
11 //出现的变量 从veryLongName命名空间中找 找不到 从其他地方中
12 cout<<"a = "<<a<<endl;
13 func();
14 }
当局部变量和命名空间重名的时候优先选择,只会选择局部变量
1 namespace veryLongName {
2 int a=100;
3 void func(){cout<<"hello namespace"<<endl;}
4 }
5 int main()
6 {
7 int a=200;
8 //使用veryLongName命名空间
9 using namespace veryLongName;
10
11 //出现的变量 从veryLongName命名空间中找 找不到 从其他地方中
12 cout<<"a = "<<a<<endl;//访问的是局部变量中的a
13 cout<<"a = "<<veryLongName::a<<endl;//访问的是veryLongName的a
14 func();
15 }
C++,中的bool类型,和51单片机中的,bit是一样的意思,
bool类型只能对其赋值 false(0) 和 true(1);
1 int main()
2 {
3 bool mybool;
4 cout<<"sizeof(bool) = "<<sizeof(bool)<<endl;//1字节
5 mybool = false;
6 cout<<"false = "<<false<<endl;//0
7 cout<<"true = "<<true<<endl;//1
8 }
C++三目运算表达式返回值为变量的地址,而C语言是返回的变量存储值;
1 int main()
2 {
3 int a = 10;
4 int b = 20;
5 cout<<"c++中:"<<(a>b?a:b)<<endl;
6
7 //a>b?a:b整体结果是变量本身(引用) 左值(能被赋值)
8 a>b?a:b = 100;//b =100
9 }
code和const(都是只读变量)的区别。
用code声明的对象会被编译器安排在ROM中,而ROM通常是只读的,无法更改。用const声明的对象可能会被安排在ROM中,但也可能在RAM中。如果在ROM中,当然不能修改了;如果在RAM中,理论上仍然可以修改,只是编译器不允许你去修改而已。const对象只能在声明时初始化一次。
在C语言中
const修饰全局变量num 变量名只读 内存空间在文
字常量区(只读)、不能通过指针获取num的地址 ,修改空间内容。局部变量可以,因为局部变量存储在栈区。
1 //其他文件夹里的num进行声明(不要赋值)
2 extern const int num;
3
4 int main()
5 {
6 printf("num = %d\n",num);
7 //num = 200;//err num只读
8
9 //C语言中const 修饰变量名 说明变量名为只读(用户不能通过变量名data进行赋值)
10 const int data = 100;//局部只读变量 内存在栈区(内存可读可写)
11 //data = 200;//err
12
13 printf("data = %d\n",data);
14 //但是:如果知道data的地址 可以通过地址间接的修改data所对应空间的内容
15 int *p = (int *)&data;
16 *p = 2000;
17 printf("data = %d\n",data);//ok 200
18 }
在C++语言中
const 修饰的变量不能被其.c和.h它文件引用,
除非加上extern,在C++中定义的const型等于c语言中的#define,只是个常量,不能修改。
除非是特殊方式定义,才能被修改。
它的好处在于可以定义类型,可以放在名空间里定义方便代码的编写。
1 //声明
2 extern const int num;
3 struct Person
4 {
5 int num;
6 char name[32];
7 };
8 int main()
9 {
10 cout<<"全局num = "<<num<<endl;//err 不识别num
11
12 //1、c++中 对于基础类型 系统不会给data开辟空间 data放到符号表中
13 const int data = 10;
14 //data = 100;//err 只读
15 cout<<"data = "<<data<<endl;
16 //2、c++中当 对data 取地址的时候 系统就会给data开辟空间
17 int *p = (int *)&data;
18 *p = 2000;
19 cout<<"*p = "<<*p<<endl;//空间内容修改成功 2000
20
21 cout<<"data = "<<data<<endl;//data 还是10为啥?
22
23 //2、当以变量的形式 初始化 const修饰的变量 系统会为其开辟空间
24 int b = 200;
25 const int a= b;//系统直接为a开辟空间 而不会把a放入符号表中
26 p = (int *)&a;
27 *p = 3000;
28 cout<<"*p = "<<*p <<endl;//3000
29 cout<<"a = "<<a <<endl;//3000
30
31 //3、const 自定义数据类型(结构体、对象) 系统会分配空间
32 const Person per = {100,"lucy"};
33 //per.num = 1000;//err
34 cout<<"num = "<<per.num<<", name = "<<per.name<<endl;//100 lucy
35 Person *p1 = (Person *)&per;
36 p1‐>num = 2000;
37 cout<<"num = "<<per.num<<", name = "<<per.name<<endl;//2000 lucy
38 }
在C++能用引用绝不用指针,给已有变量取个别名(不会再占用空间)
1 int num = 10;
2 int &a = num;//a就是num的别名 a==num,取地址int *a = #
3
4 cout<<"num = "<<num<<endl;//10
5 //对a赋值 == 对num赋值
6 a=100;
7 cout<<"num = "<<num<<endl;//100
8
9 //a是num的别名 所以num和a具有相同的地址空间
10 cout<<"a 的地址:"<<&a<<endl;
11 cout<<"num 的地址:"<<&num<<endl;
1 int main()
2 {
3 int arr[5] = {10,20,30,40,50};
4 //需求:给arr起个别名
5 int (&my_arr)[5] = arr;//my_arr就是数组arr的别名
6
7 int i=0;
8 for(i=0;i<5;i++)
9 {
10 cout<<my_arr[i]<<" ";
11 }
12 cout<<endl;
13 }
1 int main()
2 {
3 int arr[5] = {10,20,30,40,50};
4 //1、用typedef 给数组类型 取个别名
5 //TYPE_ARR就是一个数组类型(有5个元素 每个元素位int)
6 typedef int TYPE_ARR[5];
7
8 //myArr就是数组arr的别名
9 TYPE_ARR &myArr=arr;
10
11 int i=0;
12 for(i=0;i<5;i++)
13 {
14 cout<<myArr[i]<<" ";
15 }
16 cout<<endl;
17 }