C++学习1 | namespace、struct、union、enum

1·namespace

为什么要用命名空间?

1.避免名字冲突;2.划分逻辑单元 

#include <iostream>
using namespace std;
namespace A1{
	char* name = "A1";
	void eat()
	{
		cout << name << " eat();" <<endl;
	}
}
namespace A2{
	char* name = "A2";
	void eat()
	{
		cout << name << " eat();" <<endl;
	}
}
//这里的A1与上面的A1是一起的~
//就相当于:上面的是你家餐厅,下面这个是你家卧室,但是都是属于A1(你家)的~
namespace A1{
	void sleep()
	{
		cout << name << " sleep();" << endl;
	}
}
int main()
{
    // namespace
    {
        A1::eat();    //在你家餐厅吃饭
        A2::eat();    //在好朋友家餐厅吃饭
        A1::sleep();    //在你家卧室睡觉~
    }
	return 0;
}

A1::eat();  就是在你家餐厅吃饭。

A2::eat();  就是在你朋友家餐厅吃饭。

:: 是作用域限定符,相当于中文‘的’。

 另外!命名空间可以嵌套!like this⬇️!

namespace A1
 {
    namespace A11
    {
        namespace A12
        {
            something();
        }
    }
 }
 namespace A = A1::A11::A12
 //则:A1::A11::A12::something(); 就等价于 A::something();

using namespace A1;

//就相当于 ‘裸奔’ ,把A1中的东西暴露在当前作用域下

//using namespace std也是一样,把cout暴露在全局下

//风险:可能会出现命名冲突,一般还是带上::用比较好

2·struct

  C++结构

 声明或定义结构体变量,可以省略struct

 内部可以定义函数

  C++联合

 声明或定义联合变量,可以省略union

 支持匿名联合

 (匿名联合,使变量按联合的方式在内存分布)

 union{

    char cc;

    int ii;

 };

 ii = 65;

 cout << cc << endl;

 输出:A

  C++枚举

 可以省略enum

 独立类型和整形不能隐式互相转换

 enum Color {RED,BLUE,GREEN};

 Color color = 1;   //在C中这是正确的,但在C++中是错误的

 Color color = BLUE;//C++中是这样,C++中的类型检查更加严格!

*/

 struct:在C中struct里不能有函数,但是在C++中可以哈

        // C
        struct Student1
        {
            char name[32];
            int age;
        };
        struct Student1 stu_c = {"hanoi",18};
        // C++
        struct Student2
        {
            char name[32];
            int age;
            void introduce()
            {
                cout << name << "," << age << endl;
            }
        };
        Student2 stu_cpp = {"ahoj",19};
        stu_cpp.introduce();

输出: 

union:匿名联合举例

    union
    {
        char c[4];
        int i;
    };
    i = 0x12345678;
    for(int i=0;i<4;++i)
    {
        cout << hex << (int)c[i] << ' ';
    }
    cout << endl;

输出:78 56 34 12

总结一下:

/*

 cout中的c是指console

 endl -> end line

 作用域限定符 ::  相当于中文‘的’ , 表示作用域或所属关系

 namespace: 相同名字的namespace作用域相同

 namespace的作用:避免名字冲突、划分逻辑单元,名字空间中的声明和定义可以分开

 名字空间可以嵌套,使用时候得一层一层的扒皮。

 名字空间也可以赋值取别名,比如

 namespace A1

 {

    namespace A11

    {

        namespace A12

        {

            something();

        }

    }

 }

 namespace A = A1::A11::A12

 则:A1::A11::A12::something(); 就等价于 A::something();

 using namespace A1;

 就相当于 ‘裸奔’ ,把A1中的东西暴露在当前作用域下

 using namespace std也是一样,把cout暴露在全局下

 风险:可能会出现命名冲突,一般还是带上::

  C++结构

 声明或定义结构体变量,可以省略struct

 内部可以定义函数

  C++联合

 声明或定义联合变量,可以省略union

 支持匿名联合

 (匿名联合,使变量按联合的方式在内存分布) 

union{

    char cc;

    int ii;

 };

 ii = 65;

 cout << cc << endl;

 输出:A

  C++枚举

 可以省略enum

 独立类型和整形不能隐式互相转换 

enum Color {RED,BLUE,GREEN};

Color color = 1;   //在C中这是正确的,但在C++中是错误的

Color color = BLUE;//C++中是这样,C++中的类型检查更加严格!

*/

猜你喜欢

转载自blog.csdn.net/Hanoi_ahoj/article/details/81414285
今日推荐