
C/C++
文章平均质量分 64
glx2012
这个作者很懒,什么都没留下…
展开
-
什么时候会用到拷贝构造函数?
一、什么时候会用到拷贝构造函数? 拷贝构造函数 Person(const Person & per) 特点:具有单个形参(常用const修饰,是对本身类类型的引用,因为是要拷贝同类型(相同类)的对象)1当用类的一个对象初始化该类的另一个对象时.例如:C/C++ code?12345原创 2012-11-28 16:52:21 · 771 阅读 · 0 评论 -
Eclipse CDT 中 while(cin>>s) 结束方法
使用Eclipse-cdt做开发的同学可能会遇到这样的问题,需要输入EOF作为结束标志结束输入,但是不知道怎么结束输入。在网上搜了一堆解决方法,都是说windows下使用 Ctrl+Z 做EOF信号,unix和linux下用 Ctrl+D 做EOF信号。自己在Eclipse-cdt中试一下,发现这招行不通。例如调试和运行以下代码,使用 Ctrl+D 也是无法终止输入的。int ma原创 2012-12-27 21:21:05 · 1054 阅读 · 1 评论 -
Singleton 考虑内存的释放和多线程
GOF的《设计模式》中这样描述:保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能阻止你实例化多个对象。一个最好的办法是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。也就是说,很多时候我们需要全局的对象,如一个工程中,数据库访问对象只有一个,这时,可以考虑使用单例模式。单例原创 2013-04-08 10:45:55 · 1194 阅读 · 0 评论 -
总结C++中的一些特殊情况
1. 当x为负的奇数时,右移位和除法运算的结果不相等。其他(正数、负偶数)情况一样。 因为负数在内存中是以补码的方式存储的2. char *str = "microsoft";cout cout 输出的是整个字符串(比较特殊,不明白为什么)3. strlen遇到/0的时候结束。和sizeof的区别。#include #include using原创 2013-04-07 17:21:57 · 633 阅读 · 0 评论 -
字符数组和字符指针
1.字符数组是由若干个数组元素组成的,每个元素占用一个存储单元,保存一个字符。 例子: char s[50]; 定义了一个字符数组,编译器将会分配50个连续的存储单元。2.字符串指针变量本身是一个变量,用来保存字符串常量(指向的内容可能是常量)的首地址。如果字符串指针变量没 初始化而使用,将产生不可预料的后果。 例子: char *ps; 定义字符串指针变量,编译原创 2013-03-28 21:03:55 · 512 阅读 · 0 评论 -
指针加减操作,当a为数组时a和&a的区别
求值:int *a[6][3]; int expr=a[5]-a[2]; 输出expr=9.1. 二维数组元素的地址 为了说明问题, 我们定义以下二维数组: int a[3][4]={{0,1,2,3}, {4,5,6,7}, {8,9,10,11}}; a为二维数组名, 此数组有3行4列, 共12个元素。但也可这样来理解, 数组a由三个元原创 2013-04-03 16:24:08 · 895 阅读 · 0 评论 -
字符串常量放在内存中的静态存储区
一、在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回原创 2013-04-08 13:39:15 · 1541 阅读 · 0 评论 -
[C++]关于指针作为函数参数传递
【例1】Test函数的语句GetMemory(str, 100)并没有使str获得期望的内存,str依旧是NULL,为什么?-----------------------------------------------------------------------------------------------------------------------------------v转载 2013-04-17 15:02:01 · 789 阅读 · 0 评论 -
C内存重叠问题,memcpy,memmov,strcpy
memcpy,memmove:它们都是从src所指向的内存中复制count个字节到dst所指内存中,并返回dst的值。当源内存区域和目标内存区域无交叉时,两者的结果都是一样的。但有交叉时不一样。源内存和目标内存交叉的情况有以下两种:(左边为低地址)即:dstsrc针对第一种交叉情况情况,dstsrc,memcpy和memmove的结果是一样的。请看下面的例子讲解:int原创 2013-04-17 17:26:19 · 1226 阅读 · 0 评论 -
你熟悉构造函数的调用吗?
#include using namespace std;class Base { friend ostream& operator<<(ostream &os,Base &b);public: Base() { cout << "Base()" << endl; } ~Base() { cout << "~Base()" << endl; } Base(const B原创 2013-04-19 11:31:14 · 669 阅读 · 0 评论 -
C++名字隐藏对公有继承的影响
在讨论名字隐藏对公有继承的影响前,让我们先来看看什么是名字隐藏,以及它在非继承结构中的影响。C++中的名字隐藏(Name Hiding)规则简单地理解就是:当一个具有小作用域(inner scope)的对象A和一个作用域包含A(outer scope)的对象B同名时,在A的作用域中,B将不可见。也就是说B完全被A所屏蔽。double i = 3.1415; names转载 2012-12-05 16:33:26 · 297 阅读 · 0 评论 -
关于拷贝构造函数和赋值运算符
什么时候调用拷贝构造函数?什么时候调用赋值运算符? 很多初学者容易搞不清楚。我来总结一下就是: 当进行一个类的实例初始化的时候,也就是构造的时候,调用的是构造函数(如是用其他实例来初始化,则调用拷贝构造函数),非初始化的时候对这个实例进行赋值调用的是赋值运算符。 示例如下: 1 #include iostream> 2 using na转载 2012-11-28 16:58:25 · 420 阅读 · 0 评论 -
const * 和 * const 代码讲解
#include using namespace std;int main1() { cout << "test" << endl; // 两者相等 const int c1 = 1; int const c2 = 2; cout << "c1:" << c1 << ';' << "c2:" << c2 << endl; // cp1是指向 const 对象的指针,指向地址中的原创 2012-11-28 15:35:41 · 409 阅读 · 0 评论 -
变量和类成员的初始化问题
C++Primer语:初始化分两种:复制初始化(int a = 1;)和直接初始化(int a(1);)1,内置类型变量 在函数体外定义都被初始化成0,在函数体内定义的话不进行初始化。函数体内的局部变量分配在栈里,定义变量只是给了它一个临时的地址,而地址中原来是有数据存在的,只不过对你来说是未知的不确定的。 内置变量的两种初始化几乎没有差别;2,类类型变量转载 2012-12-02 14:10:13 · 484 阅读 · 0 评论 -
c/c++中extern用来声明全局变量
C/C++中的变量分为全局变量、静态全局变量、局部变量和静态局部变量,在《C/C++中静态局部变量的特点与应用》中我们介绍过静态局部变量,今天我们的目标是全局变量。单个文件中的全局变量 简单一点说,全局变量就是在函数外面定义的变量,下面是一个最简单的实例,一共定义了两个int型的全局变量a和b,这两个全局变量定义的位置不大相同,a定义在函数fun1之前,而b定义在之后,a和b都定转载 2012-12-03 23:21:23 · 771 阅读 · 0 评论 -
派生类虚函数调用基类版本
C++ primer 这本书上有这么两句话“派生类虚函数调用基类版本时,必须显式使用作用域操作符。如果派生类函数忽略了这样做,则函数调用会在运行时确定并且将是一个自身调用,从而导致无穷递归。”这句话应该这样理解:当你实现派生类虚函数B : foo时,如果函数体内需要调用基类的虚函数版本时,需要显式使用基类的作用域操作符A::foo(),否则foo()就会在派生类作用域内调用派生类版转载 2012-12-04 10:27:02 · 2689 阅读 · 1 评论 -
变量的自动初始化
对于内置变量的自动初始化代码1 1 #include 2 #define CONST 100 3 int *p1; 4 int a[2]; 5 int b; 6 static int c; 7 main() 8 { 9 int d;10 static int e;11 int f[2];12 int *p2;13 pr转载 2012-12-04 16:38:57 · 463 阅读 · 0 评论 -
C++复制控制
当定义一个新类型时,通过使用复制构造函数,赋值操作符,析构函数来显示或隐式地完成对象的复制,赋值,撤销 1.复制构造函数:只有单个形参,而且该形参是对本类类型对象的引用(通常是const修饰)的构造函数,称为~ 复制构造函数可用于: 1)根据另一个同类型的对象显示或隐式初始化一个对象. 2)复制一个对象,将它作为实参传给一个函数 3)从函数返回时复制一个对象 4)初始化转载 2012-11-28 20:02:01 · 283 阅读 · 0 评论 -
派生类转换到基类的可访问性
C++ Prime 理解知识点1.如果是 public 继承,则用户代码和后代类都可以使用派生类到基类的转换。2.如果类是使用 private 或 protected 继承派生的,则用户代码不能将派生类型对象转换为基类对象。3.如果是 private 继承,则从 private 继承类派生的类不能转换为基类。4.如果是 protected 继承,则后续派生类的成员可以转转载 2012-12-04 15:07:14 · 415 阅读 · 0 评论 -
代码实现 由二叉树的先序遍历和中序遍历推出后序遍历
1 #include 2 3 using namespace std; 4 5 #define MAX 100 6 7 char preOrder[MAX] = {'A','B', 'D', 'E', 'G', 'C', 'F'}; 8 char inOrder[MAX] = {'D', 'B', 'E', 'G原创 2013-09-14 10:45:33 · 1069 阅读 · 0 评论