
C++
小魚頭XD
两粒种子一片森林
展开
-
C++函数返回引用理解(二)
(1)什么是引用?引用就是变量的别名,操作一个变量的引用也就相当于操作变量本身,这一点跟指针很类似,但是操作引用不用像操作指针一样,利用取地址符号,很不方便。而操作引用的话,则跟操作普通变量一样,所以C++之中更加鼓励使用引用。(2)C++函数为什么要使用引用?C语言之中大量利用指针作为形参或者函数返回值,这是由于值拷贝会有很大的消耗(比如传入传出一个大的结构体)。所以在C++之中转载 2013-04-22 14:38:52 · 836 阅读 · 0 评论 -
C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
1、cin 2、cin.get() 3、cin.getline() 4、getline() 5、gets() 6、getchar()附:cin.ignore();cin.get()//跳过一个字符,例如不想要的回车,空格等字符1、cin>> 用法1:最基本,也是最常用的用法,输入一个数字:#include using namespace转载 2013-05-27 11:48:01 · 545 阅读 · 0 评论 -
浅谈C++虚基类
大家都知道C++是支持多重继承的,那么就会遇到这样一个问题。如果一个派生类的多个基类是从一个共同的基类派生出来的,那么这个派生类会出现多个最底层基类的拷贝,程序中如何分辨呢。虚基类是让基类只有一个拷贝,程序中就不会出现不确定性。虚基类在派生类中声明:格式如下:class 派生类名:virtual 继承方式 基类。光看文字会有些晕,下面上代码:class base { public :转载 2013-05-15 10:47:45 · 796 阅读 · 0 评论 -
最短路径之Dijkstra算法详细讲解
1 最短路径算法在日常生活中,我们如果需要常常往返A地区和B地区之间,我们最希望知道的可能是从A地区到B地区间的众多路径中,那一条路径的路途最短。最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括:(1)确定起点的最短路径问题:即已知起始结点,求最短路径的问题。(2)确定终点的最短路径问题:与确定起点的问题相反,转载 2013-06-14 16:07:46 · 1013 阅读 · 0 评论 -
C++ static、const和static const 以及它们的初始化
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。 在C++中,static静转载 2013-06-19 11:00:37 · 614 阅读 · 0 评论 -
函数指针和指针函数
【函数指针】 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可转载 2013-05-23 09:53:05 · 583 阅读 · 0 评论 -
C++_友元函数
1、为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 具体来说:为了使其他类的成员函数直接访问该类的私有变量 即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数 优点:能够提高效率,表达简单、清晰 缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数。2、什么时候转载 2013-06-19 13:32:53 · 614 阅读 · 0 评论 -
c语言二维数组与指针
很多C++/C初学者对于二维数组与指针的关系总是搞不清楚,对它的误解比比皆是。一下是本人的一些总结,部分内容参考相关资料,希望对大家的理解有所帮助。(本文对于C/C++而言)首先,我们先从存储的角度对二维数组作一个全面的了解。二维数组在内存中的存储,是按照先行后列依次存放的。从内存的角度看,可以这样说,二维数组其实就是一个一维数组,在内存中没有二维的概念。如果把二维数组的每一行看成一个整体转载 2013-07-09 17:13:34 · 882 阅读 · 0 评论 -
C++ vector之iterator
[cpp] view plaincopyprint?#include #include using namespace std; int main() { cout"By:Sayln_wu" //编写10个元素的vector对象。用迭代器把每个元素值改为当前值+2. vectorint> ivec(3,8); cout"原值为转载 2013-06-26 19:05:05 · 1133 阅读 · 0 评论 -
自动类型转换
在C和C + +中,如果编译器看到一个表达式或函数调用使用了一个不合适的类型,它经常会执行一个自动类型转换。在C + +中,可以通过定义自动类型转换函数来为用户定义类型达到相同效果。这些函数有两种类型:特殊类型的构造函数和重载的运算符。11.6.1 构造函数转换如果我们定义一个构造函数,这个构造函数能把另一类型对象(或引用)作为它的单个参数,那么这个构造函数允许编译器执行自动类转载 2013-07-16 11:10:26 · 692 阅读 · 0 评论 -
C++类成员指针
/** * C++ Program */#include using namespace std;class Base{ public : int i; int j; static int h;};int Base::h = 0; //静态成员必须进行初始化操作int main(int argc, ch原创 2013-07-05 09:55:28 · 738 阅读 · 0 评论 -
C++模板
我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float max( float转载 2013-07-05 10:01:44 · 533 阅读 · 0 评论 -
C/C++ 指针
这是一篇我所见过的关于指针的最好的入门级文章,它可使初学者在很短的时间内掌握复杂的指针操作。虽然,现在的Java、C#等语言已经取消了指针,但作为一个C++程序员,指针的直接操作内存,在数据操作方面有着速度快,节约内存等优点,仍是很多C++程序员的最爱。指针就像是一把良剑,就看你怎么去应用它! 什么是指针? 其实指针就像是其它变量一样,所不同的是一般的变量包含的是实际的真实的数据,而转载 2013-07-04 17:36:00 · 749 阅读 · 0 评论 -
c++ dynamic_case与static_case区别
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。如下代码:class B{ public: int m_iNum; virtual void foo();};class D:public B{ public: ch转载 2013-05-22 10:43:15 · 3036 阅读 · 0 评论 -
C++常用数学函数库
数学函数,所在函数库为math.h、stdlib.h、string.h、float.h ---------------------------------------------------------------------------------------------------------- int abs(int i) 返转载 2013-07-26 11:35:07 · 1572 阅读 · 0 评论 -
c++ STL之通用编程技术
STL是一种通用编程技术。面向对象编程关注的是编程的数据方面,而通用编程技术关注的算法,它们之间的共同点事抽象和创建可重用代码,但他们的理念决然不同。 通用编程技术旨在编写独立于数据类型的代码。在C++中,完成通用程序的工具是模板。当然,模板使得能够按通用类型定义函数或类,而STL通过通用算法更进了一步。模板让这一切成为可能,但必须对元素进行仔细地设计。为了解模板转载 2013-07-12 10:59:16 · 806 阅读 · 0 评论 -
c++内存的分布
一、一个经过编译的C/C++的程序占用的内存分成以下几个部分: 1、栈区(stack):由编译器自动分配和释放 ,存放函数的参数值、局部变量的值等,甚至函数的调用过程都是用栈来完成。其操作方式类似于数据结构中的栈。 2、堆区(heap) :一般由程序员手动申请以及释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式类似于链表。 3、全转载 2013-05-07 17:23:23 · 812 阅读 · 0 评论 -
C++输入错误检测机制
cin是类istream的对象,使用cin进行输入时,它将跳过空白(空格,换行符和制表符)直到遇到非空白字符,cin将读取从非空白字符到与目标类型不匹配的第一个字符之间的全部内容。比如有cin比如再有cin正如前面所说cin输入将跳过空白直到遇到非空白字符起才开始读取。再比如cin如果再输入时输入3.3这样的数字的话,则同样的道理,在程序中点符号对于整型来说是非匹配类型原创 2013-04-17 10:58:24 · 1832 阅读 · 0 评论 -
c++基础语法(构造函数初始化列表)
C++为类中提供类成员的初始化列表类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员2.进入构造函数后在构造函数中执行一般计算使用初始化列表有两个原因:1.必须这样做: 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,而没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类转载 2013-05-07 11:00:27 · 775 阅读 · 0 评论 -
浅谈C++中指针和引用的区别
作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。浅谈C++中指针和引用的区别指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,转载 2013-04-22 14:19:38 · 637 阅读 · 0 评论 -
C++函数的返回引用
一、函数返回分以下几种情况:(1)主函数main的返回值:这里提及一点,返回0表示程序运行成功。(2)返回非引用类型:函数的返回值用于初始化在跳用函数出创建的临时对象。用函数返回值初始化临时对象与用实参初始化形参的方法是一样 的。如果返回类型不是引用,在调用函数的地方会将函数返回值复制给临时对象。且其返回值既可以是局部对象,也可以是求解表达式的结果。(3)返回引用:当函数返回引用类型时转载 2013-04-22 14:36:47 · 795 阅读 · 0 评论 -
C++函数模板 模板实例化、具体化
函数模板是C++新增的一种性质,它允许只定义一次函数的实现,即可使用不同类型的参数来调用该函数。这样做可以减小代码的书写的复杂度,同时也便于修改(注:使用模板函数并不会减少最终可执行程序的大小,因为在调用模板函数时,编译器都根据调用时的参数类型进行了相应实例化)。下面来看看函数模板的使用过程:#include #include struct job{ char nam转载 2013-04-23 10:29:55 · 793 阅读 · 0 评论 -
C++输出内容到控制台和文件
#include #include #include using namespace std;int main(){ ofstream outFile; //声明ofstream 类型的变量 string s_name; int i_age; cout getline(cin,s_name); cout原创 2013-04-17 10:40:05 · 7792 阅读 · 0 评论 -
C/C++输入输出,函数区别
c++: 1).cin.get()不会读取换行符,换行符还在输入流中 2).cin.getline()会读取换行符,并把换行符从输入流中丢掉 3).cin.get()读取空行后将设置失效位(failbit),意味接下来的输入将被阻断关闭输入 (注:只读取到换行符的时候,意味读取到空行,可以使用cin.clear()命令恢复); 4).当输入行包含的字符数比指原创 2013-04-16 13:46:31 · 1066 阅读 · 0 评论 -
C++文件流操作,从文件中读取数据并显示
#include #include #include #include #include using namespace std;int main(){ ifstream inFile; inFile.open("get.txt"); if(!inFile.is_open()){ cout exit(0原创 2013-04-17 18:24:10 · 4248 阅读 · 0 评论 -
数组指针和指针数组
指针数组:即数组的元素是指针 形如:char *p_char[10];(这里强调的是数组,数组的长度为10,每个元素又是一个指针)数组指针:即指向数组的指针 形如:char (*p_char)[10];(这里强调的是指针,一个指向有两个char类型元素的数组)/*注:[]要比*的优先级高*/原创 2013-04-18 14:58:08 · 774 阅读 · 0 评论 -
C++的运算符重载
C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作转载 2013-04-27 14:15:44 · 591 阅读 · 0 评论 -
C++操作符重载
一、什么是操作符重载操作符重载可以分为两部分:“操作符”和“重载”。说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载。运算符重载和函数重载的不同之处在于操作符重载重载的一定是操作符。我们不妨先直观的看一下所谓的操作符重载: 1 #include 2 3 using namespace std; 4 5 int main() 6 {转载 2013-04-27 14:29:01 · 624 阅读 · 0 评论 -
c++ auto_str自动管理new 动态申请的内存
C++的auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理。 1 构造函数与析构函数 auto_ptr在构造时获取对某个对象的所有权(ownership),在析构时释放该对象。我们可以这样使用auto_ptr来提高代码安全性:int* p = new int(0);auto_ptrint> ap(p);从此我们不必关心应该何时释放p, 也不用担心转载 2013-04-28 11:27:44 · 770 阅读 · 0 评论 -
C++ 深拷贝与浅拷贝
C++中对象的复制就如同“克隆”,用一个已有的对象快速地复制出多个完全相同的对象。一般而言,以下三种情况都会使用到对象的复制:(1)建立一个新对象,并用另一个同类的已有对象对新对象进行初始化,例如:[cpp] view plaincopyclass Rect { private: int width; int height; }; R转载 2013-04-28 12:28:03 · 513 阅读 · 0 评论 -
C++嵌套类的学习
嵌套类,这里指的是语法上的嵌套类,实际上是平行的关系。 外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现且同时可以对用户隐藏该底层实现。# include using namespace std; class Outer { class Inner { public: void Fun() {转载 2013-05-16 11:12:20 · 717 阅读 · 0 评论 -
C++的私有继承、公有继承和保护继承
#include using namespace std; class Animal { protected: int test; void sleep(){cout "animal sleep...\n";} public: Animal(){ test = 0; cout "animal init...\n";}转载 2013-05-16 11:44:26 · 752 阅读 · 0 评论 -
【C++面向对象】类继承、多态与virtual成员
一、C++类成员的访问权限1. Public成员public成员为类和外部“通信”的“接口”,可以在类的外部调用,没有访问限制。2. Privatec成员与public相对,private为类的“私有”成员,主要是供类内部调用。外部可以通过public成员(函数)来与其“通信”(获取其值或更改)。除此之外,类的“友元”(friend)可以调用类的私有成员。3. protec转载 2013-05-07 11:36:46 · 847 阅读 · 0 评论 -
C++ const关键字 总结
1、const修饰变量const修饰普通变量只需掌握两点:(1)声明时必须进行初始化;(2)变量的值不能再改变。如代码:"font-size: 18px;">const int i; //error: uninitialized const 'i' const int j =0; j = 1; //error: assignment of read-onl转载 2013-05-07 11:47:48 · 557 阅读 · 0 评论 -
一份C++面试题和答案
1. 以下三条输出语句分别输出什么?1char str1[] ="abc";2char str2[] ="abc";3const char str3[] = "abc";4const char str4[] = "abc";转载 2013-08-12 15:21:43 · 690 阅读 · 0 评论