win qt 实验
来源:互联网 发布:网络不良信息的危害 编辑:程序博客网 时间:2024/06/09 18:49
关于include的<>和" "
在C程序中包含文件有以下两种方法:
(1)用符号“<”和“>”将要包含的文件的文件名括起来。这种方法指示预处理程序到预定义的缺省路径下寻找文件。预定义的缺省路径通常是在INCLUDE环境变量中指定的,请看下例:
INCLUDE=C:\COMPILER\INCLUDE;S:\SOURCE\HEADERS;
对于上述INCLUDE环境变量,如果用#include语句包含文件,编译程序将首先到C:\COMPILER\INCLUDE目录下寻找文件;如果未找到,则到S:\SOURCE\HEADERS目录下继续寻找;如果还未找到,则到当前目录下继续寻找。
(2)用双引号将要包含的文件的文件名括起来。这种方法指示预处理程序先到当前目录下寻找文件,再到预定义的缺省路径下寻找文件。
explicit关键字
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).
- class CxString // 使用关键字explicit的类声明, 显示转换
- {
- public:
- char *_pstr;
- int _size;
- explicit CxString(int size)
- {
- _size = size;
- // 代码同上, 省略...
- }
- CxString(const char *p)
- {
- // 代码同上, 省略...
- }
- };
- // 下面是调用:
- CxString string1(24); // 这样是OK的
- CxString string2 = 10; // 这样是不行的, 因为explicit关键字取消了隐式转换
- CxString string3; // 这样是不行的, 因为没有默认构造函数
- CxString string4("aaaa"); // 这样是OK的
- CxString string5 = "bbb"; // 这样也是OK的, 调用的是CxString(const char *p)
- CxString string6 = 'c'; // 这样是不行的, 其实调用的是CxString(int size), 且size等于'c'的ascii码, 但explicit关键字取消了隐式转换
- string1 = 2; // 这样也是不行的, 因为取消了隐式转换
- string2 = 3; // 这样也是不行的, 因为取消了隐式转换
- string3 = string1; // 这样也是不行的, 因为取消了隐式转换, 除非类实现操作符"="的重载
无explicit
- class CxString // 没有使用explicit关键字的类声明, 即默认为隐式声明
- {
- public:
- char *_pstr;
- int _size;
- CxString(int size)
- {
- _size = size; // string的预设大小
- _pstr = malloc(size + 1); // 分配string的内存
- memset(_pstr, 0, size + 1);
- }
- CxString(const char *p)
- {
- int size = strlen(p);
- _pstr = malloc(size + 1); // 分配string的内存
- strcpy(_pstr, p); // 复制字符串
- _size = strlen(_pstr);
- }
- // 析构函数这里不讨论, 省略...
- };
- // 下面是调用:
- CxString string1(24); // 这样是OK的, 为CxString预分配24字节的大小的内存
- CxString string2 = 10; // 这样是OK的, 为CxString预分配10字节的大小的内存
- CxString string3; // 这样是不行的, 因为没有默认构造函数, 错误为: “CxString”: 没有合适的默认构造函数可用
- CxString string4("aaaa"); // 这样是OK的
- CxString string5 = "bbb"; // 这样也是OK的, 调用的是CxString(const char *p)
- CxString string6 = 'c'; // 这样也是OK的, 其实调用的是CxString(int size), 且size等于'c'的ascii码
- string1 = 2; // 这样也是OK的, 为CxString预分配2字节的大小的内存
- string2 = 3; // 这样也是OK的, 为CxString预分配3字节的大小的内存
- string3 = string1; // 这样也是OK的, 至少编译是没问题的, 但是如果析构函数里用free释放_pstr内存指针的时候可能会报错, 完整的代码必须重载运算符"=", 并在其中处理内存释放
ps:
explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 所以explicit关键字也就无效了.
有一个例外, 就是当除了第一个参数以外的其他参数都有默认值的时候, explicit关键字依然有效, 此时, 当调用构造函数时只传入一个参数, 等效于只有一个参数的类构造函数
阅读全文
0 0
- win qt 实验
- win QT
- win qt
- 补 win实验
- qt 之win程序图标
- QT win 下的安装
- Win CE以太网套接字实验小结
- win 10 实验预编译的 mxnet
- 实验 :win版oracle的安装
- Qt实验一
- qt编程win下环境搭建
- win下Qt连接MySql (mingw)
- win音视频--qt视频显示
- win 7 64 VS 2012 QT 5.20
- 在WIN+QT中使用中文
- qt 获取win操作系统版本信息
- qt -win COFF: file invalid or corrupt
- Qt程式异常崩溃处理技巧(Win)
- 变量在内存中的存储
- Unity Learning for Day 2
- VMware下安装VMware tools使系统全屏
- c++类的大小计算
- 在eclipse中安装svn插件
- win qt 实验
- Linux文件与目录管理常用命令
- HDU-1870
- win10中如何配置PHP集成环境wampserver
- 【数据结构】内部排序之快速排序(Quick Sort)
- (ffmpeg3.3.x更新纪要)雷霄骅《最简单的基于FFMPEG+SDL的视频播放器》
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛—G
- Collections in Java
- Java 试题八