C++基础
文章平均质量分 64
徐小hi
爱笑,性格开朗的人
展开
-
C++const对象、const成员变量、const成员函数
一、常对象1、数据成员值在对象的整个生存期内不能改变。在定义时必须初始化,而且不能被更新(因为成员变量不可以修改)。2、常对象,只能调用常成员函数,保证常对象的数据成员不被改变,不能调用非常成员函数,非常成员函数会修改成员变量。class Test{public: Test(int i) { x = i; }private: int x;};// 定义常对象const Test a(3); // 定义时,初始化二、常成员变量1、常数据成员,一经初始化就不可改变。原创 2022-01-20 15:12:24 · 1001 阅读 · 0 评论 -
C++封装、继承和多态总结
通常用一个专门的抽象类作为封装的接口类来操作子类,抽象类不能实例化,只能指针操作子类的对象。 通过赋值,也就是接口的指针指向子类实例化对象的内存块。 编译器通过指针来访问成员变量,指针指向哪个对象就使用哪个对象的数据;编译器通过指针的类型来访问成员函数,指针属于哪个类的类型就使用哪个类的函数(多态除外,多态是通过查虚表来进行操作的)。例子如:class fat...原创 2020-03-23 15:25:13 · 729 阅读 · 0 评论 -
一些编码格式的字符串转换
string CStringHelper::Unicode2UTF8(const wstring& strUnicode){ int length = ::WideCharToMultiByte(CP_UTF8, 0, strUnicode.c_str(), -1, NULL, 0, NULL, NULL); if (length <= 0) return ""; char* pText原创 2016-11-24 19:19:00 · 442 阅读 · 0 评论 -
C++ 三大特性之封装
本篇博客主要介绍C++ 的封装机制。在本篇博客中,简单介绍了封装的相关概念以及在C++ 中实现封装的基本手段。什么是封装?封装: 封装可以隐藏实现细节,使得代码模块化封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。在面向对象编程上可理解为:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。数据抽象数据抽象是指,只向外界提供关键信息...转载 2018-05-22 15:31:50 · 1392 阅读 · 0 评论 -
C++ 三大特性之继承
原文地址:http://huqunxing.site/2016/09/12/C++%20%E4%B8%89%E5%A4%A7%E7%89%B9%E6%80%A7%E4%B9%8B%E7%BB%A7%E6%89%BF/本篇博客主要介绍C++的继承机制,系统的介绍了在 C ++ 中继承的概念、基本使用方法、三种继承方式、多继承、二义性、虚基类、构造函数与析构函数等相关知识。基本概念继承: 类的继承,就...转载 2018-05-22 15:33:10 · 210 阅读 · 0 评论 -
C++ 三大特性之多态
原文地址:http://huqunxing.site/2016/09/08/C++%20%E4%B8%89%E5%A4%A7%E7%89%B9%E6%80%A7%E4%B9%8B%E5%A4%9A%E6%80%81/C++ 的三大特性,封装,继承,多态。封装可以使得代码模块化,继承可以扩展已存在的代码,而多态的目的则是为了接口重用。本篇博客主要介绍C++中多态的相关概念及使用方法。概念多态(Pol...转载 2018-05-22 15:34:13 · 168 阅读 · 0 评论 -
C++重载机制
原文地址:http://huqunxing.site/2016/09/08/C++%E9%87%8D%E8%BD%BD%E6%9C%BA%E5%88%B6/C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。本篇博客主要介绍C++中函数重载机制和运算符重载机制。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(...转载 2018-05-22 15:36:19 · 1412 阅读 · 0 评论 -
关于重写和重定义
重写、重定义和继承完全是两个概念,比如析构函数:能被派生类重写,来实现多态,可以方便的用指向基类的指针释放派生类的对象,不能被继承,因为举个例子,派生类和基类有不同的成员,如果基类的默认析构函数是从基类继承的话,那么派生类在析构时就有内存空间不能被释放的问题存在了,所以析构函数是不能被继承的。“继承”是一整套的机制,是对类而言的。对一个成员函数说能否被继承,容易引起语言上的概念混淆(至少各人的理解...原创 2018-05-22 16:12:16 · 3595 阅读 · 0 评论 -
c++ const 全面总结!
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。 Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。一、Const作用 如下表所示: 二、Const的使用 1、定义常量 (1)const修饰变量,以下两种定义形式...转载 2018-12-11 14:03:45 · 135 阅读 · 2 评论 -
string->WCHAR*
string newMd5str = md5.toString(); 1 LPCWSTR result = (LPCTSTR)(_bstr_t)newMd5str.c_str(); 2 std::wstring stemp = Str2Wstr(newMd5str); LPCWSTR result = stemp.c_str(); std::wstring Str2Wstr(const原创 2016-09-06 13:35:07 · 412 阅读 · 0 评论 -
vs下抓取屏幕选定部分的图片 并保存
HBITMAP CopyScreenToBitmap(LPRECT lpRect) //lpRect 代表选定区域{ HDC hScrDC, hMemDC; // 屏幕和内存设备描述表 HBITMAP hBitmap,hOldBitmap; // 位图句柄 int nX, nY, nX2, nY2; //原创 2016-04-19 11:33:33 · 922 阅读 · 0 评论 -
sizeof的理解
sizeof是返回变量声明后所占的内存数。对于一个指针而言,声明后,指针本身所占的内存就是4个字节,而声明一个数组的时候就创建了一个数组大小的内存。如:char *s = "dfsdfsd"; char ss[] = "asdf"; int a[10];int *aa;sizeof(s) = 4; s是个指针,指针声明后的地址为4个自己,而这个地址里面存的是后面字符转的地址原创 2016-03-04 13:46:03 · 416 阅读 · 0 评论 -
C/C++内存存储
首先提到内存的存储,不得不说下变量的左值和右值:变量包含两个值:左值和右值。左值是内存存储区的名字,右值是存放存储区中的值。至于存储区,究竟是在哪,可分为以下几种: 1、栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 2、堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个原创 2016-02-25 14:26:56 · 553 阅读 · 0 评论 -
C++不可以返回局部变量的引用或指针
返回引用事实上是返回变量的地址。所谓的不可以返回局部变量的引用或指针,指的是不能返回局部变量的引用或地址给引用或指针。事实上还是看该地址的位置是否在该函数的栈区,若是在栈区,函数调用结束,该地址就被释放了。尽管会出现栈地址上的值没被销毁的问题,可能是该栈区还没被其他的函数堆栈掉。1、int & fun(){int a = 10;return a;} 不可以原创 2016-03-04 15:03:55 · 11571 阅读 · 14 评论 -
C++构造函数和拷贝构造函数等的使用
对于一个类A来说,有一个构造函数A(int num1,int num2);我们在定义一个对象的时候可以这样初始化:1、A a1(1,2); 隐式调用构造函数2、A a2 = A(1,2); 显式调用构造函数,先创建个临时对象,再将临时对象复制给a23、A *a3 = new A(1,2) 用指原创 2016-03-18 10:30:57 · 407 阅读 · 1 评论 -
C++回调函数和this指针的实例
在做到界面开发的过程中,往往需要通过子窗口去操作父窗口的问题。方法很多,大致实现下回调函数和类静态对象的使用。在类的非静态函数的形参列表里,有个隐含的this指针,但是静态成员函数没有this指针,所以类的静态成员函数无法调用非静态的成员。要想在静态成员函数里调用成员,需要将当前的this指针传进去。在下面的例子都有实现。 每次创建类的对象都会相应的生成this指针,指向这个实例化对象。原创 2016-03-09 17:26:00 · 2116 阅读 · 0 评论 -
C++头文件的重定义问题以及头文件互相包含问题
在C++的头文件里,通常通过#pragma once与#ifndef两种防止头文件二次编译。 有的人将重复编译,重复包含与重复定义弄混,比如:定义一个类,在实例化它之前并不产生内存开销;这与基本类型有所区别。明明在头文件使用了#pragmaonce;#ifndef...#define...#endif,为什么在头文件定义了一个全局变量,还会出现重复定义的错误,为什么头文件里的类的定义原创 2016-03-10 16:04:14 · 4083 阅读 · 0 评论 -
C++的全局变量,静态全局变量,常全局变量定义与声明
头文件中变量如果没有初始化就是声明;初始化了就是定义。在C++语言中,变量有且只能有一次定义,但是可以声明多次,使用变量前必须定义或声明。再说到这些变量的声明与定义前,要知道这些变量的链接性:外部全局变量 外部连接性 可以被extern静态全局变量(static) 内部连接性 不能被extern常全局变量(const) 内部连接原创 2016-03-07 09:28:57 · 8727 阅读 · 1 评论 -
IO五种模型
首先我们看看IO的五种模型:同步和异步仅仅是关于所关注的消息如何通知的机制,而不是处理消息的机制.也就是说:同步的情况下,是由处理消息者自己去等待消息是否被触发异步的情况下是由触发机制来通知处理消息者一般来说,程序进行输入操作有两步:1.等待有数据可以读2.将数据从系统内核中拷贝到程序的数据区。对于socket编程来说:原创 2016-03-24 10:35:44 · 1170 阅读 · 1 评论 -
关于C++赋值运算符能不能继承问题
C++的赋值运算符是可以被继承的。有的人说不能被继承,“赋值运算符重载函数”不是不能被派生类继承,而是被派生类的默认“赋值运算符重载函数”给覆盖了。条款45:弄清C++在幕后为你所写、所调用的函数一个空类什么时候不是空类?----当C++编译器通过它的时候。如果你没有声明下列函数,体贴的编译器会声明它自己的版本。这些函数是:一个拷贝构造函数,一个赋值运算符,一个析构函数,一对取址原创 2016-03-30 14:29:16 · 3220 阅读 · 1 评论 -
*p++和*++p
首先从运算符优先级的问题上看,后置++的优先级高于前置++和*,前置++和*处于同一优先级,遵从从右往左的结合性;然后在看前置++和后置++的返回值问题:++x 表达式的值是原值+1,返回自身引用,可以当做左值,x++ 表达式的值是原值,返回一个临时变量,不能当做左值。那么问题就好解决了:*p++: 等价于 *(p++), 指针++,整个表达式的值是p所指的位置的值,而不是p+原创 2016-02-02 16:10:27 · 874 阅读 · 0 评论