文章目录

  • 位域
  • extern "C"
  • struct 和 typedef struct
  • C++中struct 和 class
  • union联合
  • explicit(显式)关键字
  • friend友元类和友元函数
  • using
  • ::范围解析运算符

本文为学习 博客的学习笔记,感谢博主

位域

Bit mode: 2;     //mode占2位

类可以将其数据成员定义为位域(bit-field),在一个位域中含有一定数量的二进制位。当一个程序需要向其他程序或硬件设备传递二进制数据时,通常会用到位域
位域在内存中的布局是与机器有关的
位域的类型必须是整型或枚举类型,带符号类型中的位域的行为将因具体实现而定
取地址运算符(&)不能作用于位域,任何指针都无法指向类的位域

extern “C”

被extern限定的函数或变量是extern类型的
被extern "C"修饰的变量和函数时按照C语言方式编译和链接的
extern "C"的作用是让C++编译器将extern "C"声明的代码当做C语言代码处理,可以避免C++因符号修饰导致代码不能和C语言库中的符号进行链接的问题。
使用举例

#ifdef __cplusplus
extern "C"{#endifvoid *memset(void *, int, size_t);#ifdef __cplusplus
}
#endif

struct 和 typedef struct

C中

//c
typedef struct Student{int age;
}S;

等价于

//c
struct Student{int age;
};
typedef struct Student S;

此时,S等价于struct Student,但两个标识符名称空间不相同
另外还可以定义与struct Student不冲突的void Student(){}
C++中
由于编译器定位符号的规则(搜索规则)改变,导致不同于C语言
如果在类标识符空间定义了struct Student{…},使用Student me; 时,编译器将搜索全局标识符表,Student未找到,则在类标识符内搜索
即表现为可以使用Student,也可以使用struct Student,如下:

//cpp
struct Student{int age;
};void f(Student me);       //正确,“struct”关键字可省略

若定义了与Student同名函数之后,则Student只代表函数,不代表结构体,如下:

typedef struct Student{int age;
}S;void Student(){}     //正确,定义后“Student”只代表此函数//void S(){}          //错误,符号“S”已经被定义为一个“struct Student”的别名int main(){Student();struct Student me; //正确,或者“S me;”都可return 0;
}

C++中struct 和 class

总的来说,struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体
区别
最本质的一个区别就是默认的访问控制
默认的继承访问权限。struct是public的,class是private的
struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的

union联合

联合(union)是一种节省空间的特殊的类,一个union可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值。当某个成员被赋值后其他成员变为未定义的状态。联合有如下特点:
默认访问控制符为public
可以含有构造函数、析构函数
不能含有引用类型的成员
不能继承自其他类,不能作为基类
不能含有虚函数
匿名union在定义所在作用域可直接访问union成员
匿名union不能包含protected成员或private成员
全局匿名联合必须是静态(static)的
使用举例

#include<isotream>union UnionTest{             //unionUnionTest() : i(10) {};      //构造函数int i;double d;
};static union{                 //全局静态匿名unionint i;double d;
};int main(){UnionTest u;union{                     //局部匿名unionint i;double d;};std::cout<<u.i<<std::endl;  //输出UnionTest联合的10::i=20;std::cout<<::i<<std::endl;    //输出全局静态匿名联合的20i=30;std::cout<<i<<std::endl;   //输出局部匿名联合的30return 0;
}

explicit(显式)关键字

不太明白

friend友元类和友元函数

能访问私有成员
破坏封装性
友元关系不可传递
友元关系的单向性
友元声明的形式和数量不受限制

using

using声明
一条using声明语句一次只引入命名空间的一个成员。它使得我们可以清楚知道程序中所引用的到底是哪个名字。如:
using namespace_name::name;
构造函数的using声明
在C++11中,派生类能够重用其直接基类定义的构造函数

class Derived : Base{public:using Base::Base;/* ... */
}

如上using声明,对于基类的每个构造函数,编译器都生成一个与之对应(形参列表完全相同)的派生类构造函数。生成如下类型构造函数:
Derived(parms) : Base(args) {}
using指示
using指示使得某个特定命名空间中所有名字都可见,这样我们就无需再为它们添加任何前缀限定符了。如:
using namespace_name name;
尽量少使用using 指示污染命名空间
一般说来,使用using命令比使用using编译命令更安全,这是由于它只导入了指定的名称。如果该名称与局部名称发生冲突,编译器将发出指示。using编译命令导入所有的名称,包括可能并不需要的名称。如果与局部名称发生冲突,则局部名称将覆盖名称空间版本,而编译器并不会发出警告。另外,名称空间的开放性意味着名称空间的名称可能分散在多个地方,这使得难以准确知道添加了哪些名称
using使用
尽量少使用using指示
using namespace std;
应该多使用using声明

int x;
std::cin>>x;
std::cout<<x<<std::endl;

或者

using std::cin;
using std::cout;
using std::endl;
int x;
cin>>x;
cout<<x<<endl;

::范围解析运算符

分类
全局作用域符(::name):用于类型名称(类、类成员、成员函数、变量等)前,表示作用域为全局命名空间
类作用域符(class::name):用于表示指定类型的作用域范围是具体某个类的
命名空间作用域符(namespace::name):用于表示指定类型的作用域范围是具体某个命名空间的
::使用

int count = 11;             //全局(::)的countclass A{public:static int count;        //类A的count(A::count)
};
int A::count = 21;void fun(){int count = 31;          //初始化局部的count为31count = 32;                //设置局部的count的值为32
}int main(){::count = 12;          //测试1:设置全局的count的值为12A::count = 22;         //测试2:设置类A的count为22fun();                    //测试3return 0;
}

位域,extern “C“,struct 和 typedef struct,struct 和 class,union 联合,friend友元类,using,::范围解析运算符相关推荐

  1. struct和typedef struct

    原文:https://www.cnblogs.com/qyaizs/articles/2039101.html struct和typedef struct 分三块来讲述: 1 首先://注意在C和C+ ...

  2. c语言中的typedef struct相当于java的一个类?,C ++中'struct'和'typedef struct'之间的区别?...

    在C ++中,之间有什么区别: struct Foo { ... }; 和 typedef struct { ... } Foo; #1楼 您不能对typedef结构使用forward声明. stru ...

  3. struct和typedef struct在C与C++中用法

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

  4. struct和typedef struct彻底明白了

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

  5. struct和typedef struct用法

    参考:http://www.cnblogs.com/qyaizs/articles/2039101.html C语言: typedef struct Student{int score;}Stu; / ...

  6. c/c++教程 - 1.10 结构体 使用typedef定义struct结构体 结构体数组 结构体指针 结构体嵌套 结构体做函数参数 结构体const

    十二.结构体 (1)结构体定义和使用 基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型. 参考视频:https://www.bilibili.com/video/BV1et411b ...

  7. struct与typedef 结构体定义

    结构体的基本定义方法有三种: struct 结构体名 变量名; struct 结构体名 变量名 = { 成员1值, 成员2值... }; 定义结构体时顺便创建变量; 这三种的具体代码如下: /* -- ...

  8. struct和typedef struct彻底明白了,引用自https://www.cnblogs.com/qyaizs/articles/2039101.html

    struct和typedef struct彻底明白了 struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: t ...

  9. struct和typedef struct的区别

    在了解struct和typedef struct之前,我们先学习下typedef的定义和用法. typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(in ...

最新文章

  1. 单击“登录”后,用户名和密码显示在地址栏中,不安全
  2. 【Mybatis 之应用篇】 4_动态SQL、缓存
  3. VS2010 + C#4.0使用 async + await
  4. (88)FPGA乘法器设计(移位相加乘法器)
  5. 烟台大学计算机学院学院,烟台大学计算机学院
  6. imageView 的contentMode问题
  7. Scihub永久链接
  8. mysql集群系统_轻松构建Mysql高可用集群系统
  9. Keil(C51)的安装与注册
  10. xtreme toolkit pro——CXTPReportControl控件教程
  11. linux内核无法识别声卡,伪输出,检测不到集成声卡
  12. 易优超级字典生成器 v3.35 下载
  13. 在Excel里怎么输入可以打钩的选择框?
  14. 关于js 中 try catch用法
  15. Egret 使用反向遮罩做新手引导功能
  16. pdf文件流转图片流方法(PDF文档所有页全部转换为图片 )
  17. 办公必备计算机软件,干货分享!电脑必备的4款办公神器
  18. 术语FXO和FXS的含义是什么
  19. 优雅的数据库表ID的设计方案
  20. 如何使用uTorrent制作自己的种子

热门文章

  1. 公安计算机应用与网络安全,公安计算机信息网络的安全与管理论文原稿
  2. 12帧跑步动画分解图_flash动画片中人物跑步的运动规律和逐帧运动画面教程
  3. 西安工业云上线 中服助力智能制造发展
  4. 【认证系统】win7主题下载
  5. 计算机系统管理及控制程序,计算机管理系统控制程序
  6. Linux安装达梦8国产数据库
  7. 理解xss-劫持会话
  8. 云存储——Kanbox
  9. 如何恢复录音删除的录音文件_手机录音机的音频文件在哪
  10. google svn 服务器使用(免费SVN服务器)_陕南赤子_新浪博客