C++之旅
piaopiaopiaopiaopiao
这个作者很懒,什么都没留下…
展开
-
Linux下C/C++开发神器CLion
CLion可以方便的在Linux系统下进行可视化的调试,编码下载地址:https://www.jetbrains.com/clion/download/相关文献链接:https://blog.csdn.net/zwx19921215/article/details/83306119原创 2021-08-21 09:40:10 · 293 阅读 · 1 评论 -
Linux下C++项目调试方法
linux下debug工具https://www.cnblogs.com/gaorong/p/7204312.html在linux下开发难免会遇到bug,但是由于没有图形IDE,导致debug也变得困难,其实只要掌握一些常用的debug工具,一些错误就能很快解决,本文就介绍一些常用的工具用以调试:log输出log永远是最简单快捷的调试方式,可以快速定位bug,通过设置日志级别控制日志的...转载 2020-04-29 13:53:21 · 316 阅读 · 0 评论 -
C++之static类成员,static类成员函数
0.static修饰类中成员,表示类的共享数据1.static类成员在C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象处在。static类数据成员是与类关联的,但不与该类定义的对象有任何关系。这句话什么意思?就是static不会想普通类数据成员一样每一个类对象都有一份,全部类对象是共享一个static类成员的,例如A类对象修改了st...转载 2020-02-24 16:13:29 · 321 阅读 · 0 评论 -
QT之xGetPtrHelper函数分析
1、对应代码:template <typename T> static inline T *xGetPtrHelper(T *ptr) { return ptr; }template <typename Wrapper> static inline typename Wrapper::pointer xGetPtrHelper(const Wrapper &...转载 2020-02-24 15:18:15 · 591 阅读 · 0 评论 -
友元(友元函数、友元类和友元成员函数) C++
有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的。例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员。 友元(frend)机制允许一个类将对其非公有成员的访问权授予指定的函数或者类,友元的声明以friend开始,它只能出现在类定义的内部,友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受...转载 2020-02-23 21:05:18 · 281 阅读 · 0 评论 -
QT代码,重载函数d_func()声明形式分析和调用关系分析
QT代码,重载函数d_func()声明形式分析和调用关系分析#define X_DECLARE_PRIVATE(Class) \ inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(xGetPtrHelper(d_ptr)); } \ inline const Cl...原创 2020-02-23 17:29:32 · 2443 阅读 · 0 评论 -
C++异常处理
程序中的错误分为编译时的错误和运行时的错误。编译时的错误主要是语法错误,比如:句尾没有加分号,括号不匹配,关键字错误等,这类错误比较容易修改,因为编译系统会指出错误在第几行,什么错误。而运行时的错误则不容易修改,因为其中的错误是不可预料的,或者可以预料但无法避免的,比如内存空间不够,或者在调用函数时,出现数组越界等错误。如果对于这些错误没有采取有效的防范措施,那么往往会得不到正确的运行结果,程序不转载 2013-09-29 14:35:56 · 553 阅读 · 0 评论 -
虚函数和纯虚函数
虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtual void Eat(){……};转载 2013-09-29 15:42:02 · 543 阅读 · 0 评论 -
C++ vector
vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件 :#include 使用vector有两种不同的形式,即所谓的数组习惯和 STL习惯。一、数组习惯用法1. 定义一个已知长度的 vector :vector ivec( 10 ); //转载 2013-09-29 18:11:59 · 666 阅读 · 0 评论 -
探索C++的秘密之一详解extern "C"
时常在cpp的代码之中看到这样的代码:#ifdef __cplusplusextern "C" {#endif//一段代码#ifdef __cplusplus}#endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是转载 2013-10-02 20:21:54 · 598 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数转载 2013-10-02 20:31:41 · 451 阅读 · 0 评论 -
老鼠与毒药问题
很有意思的一道题:该趣题来源于 IBM Ponder This 三月份的谜题。 大家应该都听说过这个老题目:有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药? 这个问题的答案也堪称经典:把瓶子从 0 到 999 依次编号,然后转载 2013-10-02 22:25:03 · 1063 阅读 · 0 评论 -
关于C++中enum的探讨
如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它!enum box{pencil,pen};//这里你就转载 2013-10-02 22:48:41 · 599 阅读 · 0 评论 -
enum使用小程序
#include using namespace std;int main(){ enum Days { Sun,Mon,Tue,Wen,Tur,Fri,Sat }day; day=Mon;// day=(Days)6;// day=(Days)7; //显示the format of day is error switch (day) { case Sun:原创 2013-10-03 10:01:57 · 1663 阅读 · 0 评论 -
c++中enum 如何使用
枚举类型,顾名思义,“枚”作为量词,作“个”讲,那么枚举,就是一个一个的列举,如果一件事情能够被一个一个的列举,那么它的数量肯定就是有限的,否则是不能被一一列举出来的。所以枚举类型即为能被列举的常量的一个集合。在生活中,枚举的例子随处可见,比如礼拜几,那么就可以作为一个枚举变量。这个变量所存储的值,是有限的,且,能被我们所列举。再比较说,性别。它也可以作为一个枚举类型,我们知道,性别也就只转载 2013-10-03 09:30:47 · 1300 阅读 · 0 评论 -
C++/C功能程序代码
一、将30597分解为素数(质数)的乘积#include #include using namespace std;//函数isPrimeNum判断num是否是素数,是则返回true,否则返回falsebool isPrimeNum(int num){ //判断1、2是否为素数 if (num <= 2) { retur原创 2013-10-02 21:40:35 · 708 阅读 · 0 评论 -
C++中union结构
C++ union结构式一种特殊的类。它能够包含访问权限、成员变量、成员函数(可以包含构造函数和析构函数)。它不能包含虚函数和静态数据变量。它也不能被用作其他类的基类,它本身也不能有从某个基类派生而来。Union中得默认访问权限是public。在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我转载 2013-10-04 12:18:41 · 1191 阅读 · 0 评论 -
const和引用(&)测试小程序
程序一:#include using namespace std;int change(int& num){ num=num+99; return num;}int main(){ int num=1; cout<<change(num)<<endl; cout<<num<<endl; cin.get(); return 0;}运行结果:原创 2013-10-03 11:31:16 · 1930 阅读 · 0 评论 -
C++ const精髓
1. const的用法:看到const关键字,C++程序员首先想到的可能是const常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const是constant 的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的转载 2013-10-03 14:54:48 · 2156 阅读 · 3 评论 -
C++中的static关键字
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:[cpp] view转载 2013-10-04 10:53:11 · 524 阅读 · 0 评论 -
C++中inline函数
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline,即可以把函数指定为内联函数。inline int min(int first, int second){ .......} inline函数对编译器而言必须是可见的,以便它能够在调用点展开该函数。 与非i转载 2013-10-04 09:47:13 · 615 阅读 · 0 评论 -
C++“友元类”学习笔记
=======================什么是友元类======================= 当一个类B成为了另外一个类A的“朋友”时,那么类A的私有和保护的数据成员就可以被类B访问。我们就把类B叫做类A的友元。=======================友元类能做什么======================= 友元类可以通过自己的方法转载 2013-10-04 13:07:13 · 610 阅读 · 0 评论 -
C++之运算符重载
在前一节中曾提到过,C++中运行时的多态性主要是通过虚函数来实现的,而编译时的多态性是由函数重载和运算符重载来实现的。这一系列我将主要讲解C++中有关运算符重载方面的内容。在每一个系列讲解之前,都会有它的一些基础知识需要我们去理解。而运算符重载的基础就是运算符重载函数。所以今天主要讲的是运算符重载函数。 1.运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用域不同类型的数据导致不转载 2013-10-04 17:06:03 · 607 阅读 · 0 评论 -
运算符重载
1什么是运算符重载所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。现在要讨论的问题是: 用户能否根据自己的需要对C++已提供的运算符进行重载,赋予它们新的含义,使之一名多用。譬如,能否用“+”号进行两个复数的相加。在C++中不能在程序中直接用运算符“+”对复数进行相加运算。用户必转载 2013-10-04 17:09:04 · 1222 阅读 · 0 评论 -
运算符重载
一. 概述: 1. 运算符重载的实质: 运算符重载的实质就是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参, 然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。 2. 运算符重载的规则: (1)C++中的运算符除了少数几个以外,全部可以重载,而且只能重载已有的这些运算符。 (2转载 2013-10-04 16:50:30 · 1142 阅读 · 0 评论 -
操作符重载小程序
一、输入输出流重载class Date{public: Date(int y,int m,int d) {Year=y;Month=m;Day=d;} friend ostream& operator<<(ostream &stream,Date &date); //仅此一种声明方式,去掉任何一个&都会出错,why? friend istream& operator>>(ist原创 2013-10-04 20:17:56 · 750 阅读 · 0 评论 -
命名空间
#include "stdafx.h"#include namespace Stack{ int add(int a,int b);}namespace So{ int add(int a,int b);}int Stack::add(int a,int b){ return a+b;}int So::add(int a,int b){ return a+b原创 2013-09-29 13:28:02 · 556 阅读 · 0 评论 -
_T、_TEXT和TEXT宏的作用
1.在字符串前加一个L作用。如:L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。strlen("asd") = 3;而strlen(L"asd") = 6;2._T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式。如转载 2014-04-30 09:09:30 · 1446 阅读 · 0 评论 -
(小技巧)如何快速查在线msdn
很多人说自己电脑中没有装msdn这个软件。其实,如果没有安装msdn,这不要紧,因为只要能上网,可以在网上查更详细更全面的msdn.方法如下:比如,你想查sscanf这个函数怎么用,可以在google的查询框中中输入sscanf site:microsoft.com 即可很快打开需要的在线msdn 会了吗?你可以演练一下,试试查查别的API,转载 2014-05-01 11:18:47 · 755 阅读 · 0 评论 -
C++中函数指针的使用
在C/C++中存在着函数指针,即指向函数的指针。我目前已知的两种使用方法是: [cpp] view plaincopy#include #include typedef int* PINNT; #define PP int* int funcA(int a,int b); int funcB(int转载 2014-05-03 08:47:31 · 700 阅读 · 0 评论 -
C/C++连接MySql数据库
本文对如何使用MySql的API连接MySql数据库,开发环境为VS2008. 一、VS2008工程设置工作首先,建立一个windows应用程序的工程,将C/C++->预处理器->预处理器定义下的_WINDOWS改为_CONSOLE,将连接器->系统->子系统 选择为控制台。由于我们要使用Mysql的API,并且我们机子上肯定安装了Mysql数据库,转载 2014-05-03 13:46:27 · 423 阅读 · 0 评论 -
C++连接Access数据库
#include using namespace std;/*#import生成文件 msado15.tlh,默认是有namespace ADODB {}所有内容都包在这个名字空间中。用了no_namespace则生成的头文件中没有namespace,所有内容是全局的,否则ADODB.Connectionrename的意思就是改名了,rename("EOF","adoEOF")将EOF改名转载 2014-05-06 21:23:45 · 7264 阅读 · 1 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(转载 2014-04-21 16:00:49 · 463 阅读 · 0 评论 -
VC成功制作并使用lib库
微软有许多头文件,这些头文件里面定义了许多函数,但是在头文件中你却找不到函数内容的身影,因为函数主体被保存在了lib库中。保存在库中有一个好处,那就是源代码不容易被发现,也就是说其中的一些技术别人不容易学到。废话少说,我们现在就开始制作lib库。 首先,第一步,打开VC++6.0,按Ctrl+N,选择工程选项卡,选中“Win32 Static Library”选项,输入工程名称,转载 2014-04-22 22:15:26 · 756 阅读 · 0 评论 -
指针数组/数组指针
C/C++中有两个非常容易混淆的十分常用的但是又特别不引起人注意的两个概念,指针数组和数组指针,或许你已经对这两个概念早有耳闻,但是不知你有没有对他们做过细致的分析来区别二者呢? 下面我们来看下百度百科上是如何对二者进行定义的 数组指针 一:数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是声明定长数组时,其数组名指向的数组首地址是常量。而声明数组并转载 2014-05-15 22:13:09 · 550 阅读 · 0 评论 -
C++中的RTTI
RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息。它提供了运行时确定对象类型的方法。本文将简略介绍 RTTI 的一些背景知识、描述 RTTI 的概念,并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI;本文还将详细描述两个重要的 RTTI 运算符的使用方法,它们是 typeid 和 dynamic_cast。 其实,RTTI 在C++中并不转载 2014-05-16 13:04:31 · 478 阅读 · 0 评论 -
extern "C"---编译语言连接字符串
C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同.作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同. 2转载 2014-05-15 21:27:04 · 554 阅读 · 0 评论 -
标准C++中的string类的用法总结
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的。也许有人会说,即使不用MFC框架,也可以想办法使用MFC中的API,具体的操作方法在本文最后给出操作方法。其实,可能很多人很可能会忽略掉标准C++中string类的使用。标准C++中提供的str转载 2014-05-10 22:22:06 · 339 阅读 · 0 评论 -
C++类的const、static和const static数据成员的初始化
C++类的const、static和conststatic数据成员的初始化参考:http://blog.csdn.net/yjkwf/article/details/6067267http://www.cnblogs.com/gysm/archive/2011/09/16/2179277.html//const数据成员必须在构造函数初始化列表中初始化//static转载 2014-05-17 10:21:41 · 684 阅读 · 0 评论 -
数据库范式(1NF 2NF 3NF BCNF)详解
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。 范式说明 1.1 第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是转载 2014-05-18 09:49:26 · 491 阅读 · 0 评论