C++
文章平均质量分 85
mathZHA
这个作者很懒,什么都没留下…
展开
-
C++基类指针指向的派生类对象内存的释放
C++由于基类指针可以指向不同的派生类对象,因此当赋予基类指针不同的地址时,要注意之前的派生类对象的内存释放。int main(){ Parent* ptr = new Child1; Child2 myChild2; Child3 myChild3; ptr->show(); delete ptr; //位置1 ptr = &myChild2; ptr->show();原创 2015-05-27 16:43:25 · 5134 阅读 · 0 评论 -
99%都答不对的C++问题
下面问题的输出结果为? a = 0; cout 首先这个标题哗众取宠了,问题的实际意义也不大,只适合我这种渣渣分析学习。在学习类时,编写跟踪类的函数输出顺序的代码,发现一些奇怪的问题,然后抽象出来的问题。实际只是两方面的知识:cout的输出和前缀++和后缀++的重载。先看下面的问题,这是我另一个问题缩减版的一段代码:int test(int j){ cout <<原创 2015-05-28 10:20:34 · 1011 阅读 · 0 评论 -
linux吐核详解——详解coredump
谢谢大神,把吐核原因分析的很清楚,先转载部分,原文在这里 详解coredump。五,coredump产生的几种可能情况造成程序coredump的原因有很多,这里总结一些比较常用的经验吧: 1,内存访问越界 a) 由于使用错误的下标,导致数组访问越界。 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符。 c) 使用st转载 2015-06-10 10:54:11 · 20723 阅读 · 0 评论 -
const setfill setw
使用Deitel的C++大学教程,图书馆借的第七版,网上找到第五版的先看了指针这一章使用const修饰指针int *aPtr;int *const aPtr;const int *aPtr;const int *const aPtr;const修饰相邻右侧的东西上述依次描述为aPtr是一个指向int类型的指针aPtr是一个指向非常量整型的数据的常量指针a原创 2014-03-16 10:45:14 · 785 阅读 · 0 评论 -
多态性 虚函数
今天把多态这章看完了,前几天学了一点动态规划的内容,等学懂之后自己再回顾回顾。基类(people)和 子类(chinese、japan、american、english)都有成员函数-sayclass people{void say()const{cout }};class chinese{void say() const{cout }};cla原创 2014-04-03 21:45:08 · 562 阅读 · 0 评论 -
函数返回指针|函数返回地址
函数返回局部自动变量的地址是严重的错误。但是我们可以返回动态分配的内存的地址,因为使用操作符new分配的动态内存一直存在,直到被delete销毁或者程序结束,不受函数作用域的影响。#include using namespace std;double* treble(double);char* fun1();char* fun2();int main(){ double原创 2015-05-12 13:34:43 · 3287 阅读 · 0 评论 -
函数指针
指针存储的是变量的地址值,该变量具有与指针相同的基本类型。这样使我们能够通过一个指针在不同的时间使用不同的变量。指针还可以指向函数的地址,该功能使我们可以通过指针来调用函数,最近一次赋给指针的地址所包含的函数将被调用。显然,指向函数的指针必须包含我们想调用的函数的内存地址,但是为了正确运行,这种指针还必须包含被指向函数的形参列表以及返回类型等信息。因此,当生命函数指针时,除了指针名称以外,还必原创 2015-05-15 16:36:47 · 376 阅读 · 0 评论 -
sizof类对象,类对象的内存
成员函数不影响类对象的大小,虚函数会增加类对象的大小(4字节)。然后上代码:#include using namespace std;class Test{};class Dest{public: Dest(){} ~Dest(){} void Print(){}};class Cest{public: int num;};class Best{public:原创 2015-05-18 17:57:17 · 587 阅读 · 0 评论 -
俄罗斯方块
void show(int x, int y, int numb, int color){static int Table[row][column] = {0};int lastx = 0, lasty = 0;lastx = x + column / 2 * element;//设置下落位置为主界面中间位置x = lastx;//记忆得到中间坐标后,再把x的值赋为中间坐标la原创 2014-04-13 19:58:49 · 746 阅读 · 0 评论 -
strncpy const 构造函数 析构函数
char *strncpy(char *s1, const char *s2, size_t n);把字符串s2中的字符拷贝到字符串s1中,最多拷贝n个字符,返回s1的值strncpy不一定拷贝其第二个参数的终止字符NULL,只有在被拷贝的字符个数至少比字符串长度大1才拷贝终止字符char a[] = "welcome to library";char b[10];strncp原创 2014-03-18 12:46:33 · 765 阅读 · 0 评论 -
最大递增数
给定一串数字,寻找其中最大的递增数(连续)12345129234则最大递增数为12345最开始写了这样代码#include using namespace std;void selectString(char []);int main(){ const int Size = 1000; char s[Size]; cout << "Enter a string:\n"; cin原创 2014-03-23 16:39:52 · 745 阅读 · 0 评论 -
Windows程序设计第三章总结
#include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//程序中没有调用WndProc的程序代码,在WinMain中有对WndProc的参考,而这就是该函数要在程序开头附近定义的原因。int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PST原创 2014-05-21 10:21:29 · 547 阅读 · 0 评论 -
字符数组和指针的sizeof(),strlen()以及getline()
char类型的数组被称为字符数组,用来存储字符串。字符串终止字符表明字符串已经结束,该字符由终止字符'\0'定义,占用一个字节。sizeof 是一个运算符,返回一个对象或者类型所占的内存字节数,应用于数组名称本身时,返回整个数组占用的字节数量。strlen 是一个函数,返回C字符串的长度,C字符串的长度是从字符串开始位置到字符串终止字符的长度(不包括终止字符)。原创 2015-05-08 14:39:44 · 614 阅读 · 0 评论 -
类中重载赋值运算符
重载赋值运算符时,先根据传入的地址判断是否与自己相等,如果相等,则返回*this。否则,释放旧空间,申请新空间,复制数据,返回*this。 #include #include using namespace std;class CMessage{private: char* pMessage;public: CMessage(const char* text = "Def原创 2015-05-20 18:15:46 · 910 阅读 · 0 评论 -
类对象复制问题|类的临时对象|赋值重载函数
对象复制操作产生的系统开销很大,尤其是对象占用的内存是动态分配时。对象的复制是通过调用类复制构造函数完成的。赋值运算符涉及到对象的复制,有些情况可以避免对象复制的开销。#include #include using namespace std;#define GET_NAME(x) #xclass Test{public: Test(const char* text = "Def原创 2015-05-22 15:42:30 · 797 阅读 · 0 评论 -
windows如何在命令行下编译C/C++程序
windows如何在命令行下编译C/C++程序方法一是在Visual Studio中打开命令行,输入:cl hello.cpp所在路径\hello.cpp 或者cl /EHsc \hello.cpp方法一具体为:start->All programs->Microsoft Visual Studio 2010->Visual Studio Tools->Visual Studio Comm原创 2015-05-25 16:43:05 · 2719 阅读 · 0 评论 -
友元类成员的依赖关系|循环依赖
定义一个CBottle类,另一个类CCarton的某个成员对CBottle进行操作,因此在CBottle类中赋予CCarton成员的友元权利。我们很容易写出如下代码://CBottle类的头文件 bottle.h#include "carton.h"class CCarton;class CBottle{public: CBottle(double height, double原创 2015-05-26 10:17:21 · 1272 阅读 · 0 评论 -
C++对象模型——成员初始化列表(第二章)
2.4 成员初始化列表 (Member Initialization List) 当编写一个类的构造函数时,有可能设定类成员的初始值,或者通过成员初始化列表初始化,或者在构造函数内初始化,除了四种情况,其实任何选择都差不多。 本节中,首先澄清何时使用初始化列表才有意义,然后解释初始化列表内部的真正操作是什么,然后再看一些微妙的陷阱。 下列情况中,为了让程序能够被原创 2015-08-01 22:50:46 · 650 阅读 · 0 评论 -
C++对象模型——Copy Constructor 的建构操作(第二章)
2.2 Copy Constructor 的建构操作 有三种情况,会以一个object的内容作为另一个 class object的初值,最明显的一种情况就是对一个object做显式的初始化操作,例如:class X { ... };X x;// 明确地以一个object的内容作为另一个class object的初值X xx = x; 另两种情况是当objec原创 2015-07-30 23:25:22 · 1210 阅读 · 0 评论 -
C++对象模型——Data Member的绑定(第三章)
3.1 Data Member的绑定 (The Binding of a Data Member) 考虑下面这段代码:// 某个foo.h头文件,从某处含入extern float x;// 程序员的Point3d.h文件class Point3d {public: Point3d(float, float, float); // 问题:被传回和被设定的原创 2015-08-03 00:01:40 · 921 阅读 · 0 评论 -
C++对象模型——Data 语意学(第三章)
第3章 Data 语意学 计算如下代码的sizeof结果:class X{};class Y : public virtual X{};class Z : public virtual X{};class A : public Y, public Z{}; 上述X,Y,Z,A中没有任何一个 class 内含明显的数据,只表示了继承关系,所以认为每一个 class 的原创 2015-08-02 16:35:59 · 602 阅读 · 0 评论 -
C++对象模型——Default Constructor的建构操作(第二章)
第2章 构造函数语意学 (The Semantics of Constructor) 关于C++,最常听到的一个抱怨就是,编译器背着程序员做了太多事情.Conversion运算符就是最常被引用的一个例子.2.1 Default Constructor的建构操作 C++ Annotated Reference Manual(ARM)指出"default const原创 2015-07-29 23:59:19 · 718 阅读 · 0 评论 -
C++对象模型——对象的差异(第一章)
1.3 对象的差异 (An Object Distinction) C++程序设计模型直接支持三种programming paradigms(程序设计典范)1. 程序模型 (procedural model) 就像C一样,C++当然也支持它,字符串的处理就是一个例子,可以使用字符数组以及str*函数集:char boy[] = "Danny";char *原创 2015-07-29 09:35:26 · 806 阅读 · 0 评论 -
C++对象模型——对象成员的效率 (Object Member Efficiency)(第三章)
3.5 对象成员的效率 (Object Mem ber Efficiency) 下面某个测试,目的在测试聚合(aggregation).封装(encapsulation),以及继承(Inheritance)所引发的额外负荷的程度.所有测试都是以个别局部变量的加法,减法,赋值(assign)等操作的存取成本为依据.下面就是个别的局部变量:float pA_x = 1.725, pA_y =原创 2015-08-06 21:30:47 · 749 阅读 · 0 评论 -
C++对象模型——"继承"与Data Member(第三章)
3.4 "继承"与Data Member 在C++继承模型中,一个derived class object所表现出来的东西,是其自己的members加上其base class members的总和.至于derived class members和base class members的排列次序并未在C++ Standard中强制指定:理论上编译器可以自由安排.在大部分编译器上,base clas原创 2015-08-05 21:35:30 · 1043 阅读 · 0 评论 -
C++对象模型——程序转化语意学(第二章)
2.3 程序转化语意学 (Program Transformation Semantics) 如下程序片段所示:#include ‘"X.h"X foo() { X xx; return xx;} 看到这个代码,可能做出以下假设: 1. 每次foo()被调用,就传回xx的值 2. 如果 class X定义了一个copy原创 2015-07-31 16:09:25 · 895 阅读 · 2 评论 -
C++对象模型——关于对象(第一章)
第一章 关于对象1.1 C++对象模式(The C++ Object Model)1.1.3 C++对象模型(The C++ Object Model) Stroustrup当初设计(当前仍占有优势)的C++对象模型是从简单对象模型派生而来的,并对内存空间和存取时间做了优化.在此模型中,Nonstatic data members被配置于每一个class obj原创 2015-07-28 18:00:27 · 499 阅读 · 0 评论 -
C++对象模型——Data Member的存取(第三章)
3.3 Data Member的存取 已知下面这段代码:Point3d origin;origin.x = 0.0; x的存取成本是什么? 答案视x和Point3d如何声明而定,x可能是个 static member,也可能是个nonstatic member.Point3d可能是个独立(非派生)的 class,也可能从另一个单一的base class原创 2015-08-04 18:03:04 · 950 阅读 · 1 评论 -
C++对象模型——站在对象模型的尖端 (第七章)
第7章 站在对象模型的尖端 (On the Cusp of the Object Model) 这一章讨论三个著名的C++语言扩充性质,它们都会影响C++对象.它们分别是 template, exception handling(EH)和runtime type identification(RTTI).7.1 Template C++程序设计的风格以及习惯原创 2015-08-18 16:18:17 · 650 阅读 · 0 评论 -
C++对象模型——Template中的名称决议方式 (第七章)
Template中的名称决议方式 (Name Resolution within a Template) 必须能够区分以下两种意义,一种是C++ Standard所谓的"sope of the template",也就是"定义出template"的程序.另一种是C++ Standard所谓的"scope of the template instantiation",也就是"具现出temp原创 2015-08-19 23:09:33 · 709 阅读 · 0 评论 -
C++对象模型——Member的各种调用方式(第四章)
第四章 Function语意学 (The Semantics of Function)如果有一个Point3d的指针和对象:Point3d obj;Point3d *ptr = &obj; 当这样做:obj.normalize();ptr->normalize(); 时,会发生什么事情呢?其中的Point3d::normalize()定义如下:Point3d Point3d::原创 2015-08-08 19:49:48 · 1667 阅读 · 0 评论 -
C++对象模型——指向Data Members的指针(Pointer to Data Members)(第三章)
明天见原创 2015-08-07 20:04:04 · 1387 阅读 · 1 评论 -
C++对象模型——异常处理 (Exception Handling)(第七章)
7.2 异常处理 (Exception Handling) 欲支持exception handling,编译器的主要工作就是找出 catch 子句,以预处理被丢出来的exception.这多少需要追踪程序堆栈中每一个函数的当前作用区域.同时,编译器必须提供某种查询exception objects的方法,以知道其实际类型(这直接导致某种形式的执行期类型识别,也就是RTTI).最后,原创 2015-08-20 22:48:51 · 1455 阅读 · 0 评论 -
C++对象模型——执行期类型识别(第七章)
7.3 执行期类型识别 (Runtime Type Identification,RTTI) 下面这样的转型形式:pfct pf = pfct(pt); 被称为downcast(向下转型),因为它有效地把一个base class 转换至继承结构的末端,变成其derived classes中的某一个.Downcast有潜在性的危险,因为它遏制了类型系统的作用.Typ原创 2015-08-22 23:58:31 · 913 阅读 · 0 评论 -
C++对象模型——效率有了,弹性呢(第七章)
7.4 效率有了,弹性呢 传统的C++对象模型提供有效率的执行期支持.这份效率,再加上与C之间的兼容性,造成了C++的广泛被接受度.然而,在某些领域方面,像是动态共享函数库(dynamically shared libraries),共享内存(shared memory),以及分布式对象(distributed object)方面,这个对象模型的弹性还是不够.动态共享函数库原创 2015-08-23 23:58:01 · 631 阅读 · 0 评论 -
C++对象模型——Virtual Member Functions (虚拟成员函数)(第四章)
4.2 Virtual Member Functions (虚拟成员函数)已经看过了 virtual function的一般实现模型:每一个 class 有一个 virtual table,内含该 class 中有作用的 virtual function的地址,然后每个object有一个vptr,指向 virtual table的所在.为了支持 virtual function机制,必须首原创 2015-08-09 19:53:41 · 1499 阅读 · 0 评论 -
C++对象模型——关于对象(第一章)
第一章 关于对象在C语言中,"数据"和"处理数据的操作(函数)"是分开声明的,也就是说,语言本身并没有支持"数据和函数"之间的关联性.我们把这种程序方法成为程序性,由一组"分布在各个以功能为导向的函数中"的算法所驱动,它们处理的是共同的外部数据.举个例子,如果声明一个struct Point3d,像这样:typedef struct point3d{ float x;原创 2015-07-28 00:07:05 · 814 阅读 · 0 评论 -
Effective C++——导读(第0章)
第0章 导读 术语 (Terminology) 下面是每一位程序员都应该了解的一份小小的C++词汇,其中的术语十分重要。 所谓声明式(declaration)是告诉编译器某个东西的名称和类型,但忽略细节,下面是声明式: extern int x; // 对象object声明式std::size_t numDi原创 2015-08-24 23:56:28 · 510 阅读 · 0 评论 -
C++对象模型——Inline Functions(第四章)
4.5 Inline Functions下面是Point class 的一个加法运算符的可能实现内容:class Point { friend Point operator+(const Point&, const Point&);};Point operator+(const Point &lhs, const Point &rhs) { Point new_pt; new_p原创 2015-08-11 18:20:11 · 817 阅读 · 0 评论 -
C++对象模型——指向Member Function的指针 (Pointer-to-Member Functions)(第四章)
4.4 指向Member Function的指针 (Pointer-to-Member Functions)取一个nonstatic data member的地址,得到的结果是该member在 class 布局中的byte位置(再加1),它是一个不完整的值,需要被绑定于某个 class object的地址上,才能够被存取.取一个nonstatic member function的地址,如果原创 2015-08-11 18:09:45 · 1926 阅读 · 0 评论