![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 70
dingyuanpu
QQ:d-y-p@qq.com
展开
-
C++学习笔记
C++中,类的大括号后面要加“ ; ” 尽量避免使用void main(),因为在某些系统中,main()函数返回的int值,将被调用该程序的系统接收,通过该返回值,调用该程序的系统可以判断程序是否运行正常 良好的便程习惯(命名规则)(1)宏定义用大写字母加下划线表示,如MAX_LENGTH;(2)函数命名,如setName(), getCountOfStudents();原创 2010-05-09 17:19:00 · 820 阅读 · 0 评论 -
C++运算符重载讲解与经典实例
<br />C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如:<br />class complex <br />{ <br /> public: <br /> complex(double r=0.0,double I=0.0){real=r;imag=I;} <br /> void display(); <br /> private: <br /> double real; <br /> double imag; <br />};原创 2010-08-31 14:05:00 · 143325 阅读 · 16 评论 -
c++再学笔记
<br />递归/迭代<br /> <br />递归:直接或间接调用自己的函数<br /> <br />迭代:用现在的值,代到一个公式里面,算出下一个值,再用下一个值代入公式,如此往复地代。比如:x=(x+2/x)/2<br /> <br /> <br />类的成员函数可以使用类的任何成员,而不管其访问级别,不是类的组成部分的代码不能访问private成员<br /> <br /> <br />用class和struct关键字定义类的唯一差别在于默认访问级别:struct的成员为public,而class的原创 2010-09-03 08:14:00 · 807 阅读 · 0 评论 -
C++模板特化举例
<br />/*<br /> * 函数模板特化举例<br /> */<br />#include <iostream><br /> <br />usingnamespacestd;<br /> <br />template <class T><br />T mymax(const T t1, const T t2)<br />{<br /> cout << "非特化" << endl;<br /> return t1 < t2 ? t2 : t1;<br />}<br /> <br原创 2010-09-03 08:12:00 · 958 阅读 · 0 评论 -
小解C++的句柄类
<br />一:什么时候用到句柄类:<br />1)在对安全要求很高的领域,即使核心实现已经封闭在库中不可见,但头文件中变量定义仍可能曝露一些内部信息<br />2)在设计初期,实现部分会经常变动,甚至头文件中变量定义也需要经常变动,因此在重编译的时候头文件也需要编译,有时候导致编译时间过长。<br />3)项目做大了就会发现,往往一个工程文件代码改一个部分就需要很长时间的编译,那个等待是非常痛苦啊,所以开始在工程的架构上一定要做好充分的准备!<br />二:看下面的小例子来理解上面3条理论:<br />/转载 2010-09-03 08:09:00 · 1713 阅读 · 1 评论 -
友元三例
<br />//例1:一个普通函数是友元函数。可以访问类的私有成员变量<br />#include <iostream><br /> <br />usingnamespacestd;<br /> <br />class Time<br />{<br />public:<br /> Time(int h=20,int m=25,int s=30):m_iHour(h),m_iMinute(m),m_iSecond(s){}<br /> void Show()<br /> {原创 2010-08-28 10:50:00 · 937 阅读 · 0 评论 -
理解复制控制成员和构造函数--实例
<br />#include<iostream><br />#include<vector><br /> <br />usingnamespacestd;<br /> <br />class Exmpl <br />{<br />public:<br /> //默认构造函数<br /> Exmpl()<br /> {<br /> cout << "Exmpl()" << endl;<br /> } <br /> /原创 2010-08-30 15:35:00 · 1222 阅读 · 0 评论 -
隐式类类型转换
<br />C++ primer 中有这么一句话:可以用单个实参来调用的构造函数定义了从形参类型到该类型的一个隐式转换。<br />这么解释:<br />比如有个类A的对象a的成员函数的参数应该是类A的对象,但是把一个别的类型B的对象b传进去了,而且这个对象b的类型恰好是A的单参数构造函数参数类型,这时系统就用这个b自作聪明的创建了一个类A的临时对象c,虽然c和a都是A类型,但是是不同的对象。<br />这种隐式转换有很大风险,可以用explicit加在单参数构造函数前来避免这种类类隐形转换。<br />我转载 2010-08-27 20:16:00 · 9338 阅读 · 2 评论 -
const形参重载
<br />#include <iostream><br /> <br />usingnamespacestd;<br /> <br />void f(int& a)<br />{<br /> cout << "void f(int& a)" << endl;<br />}<br /> <br />void f(constint& a)<br />{<br /> cout << "void f(const int& a)" << endl;<br />}<br /> <br />in原创 2010-08-27 14:38:00 · 827 阅读 · 0 评论 -
给函数返回值赋值--引用返回左值
<br />返回引用的函数返回一个左值。因此,这样的函数可用于任何要求使用左值的地方<br /> <br />#include <iostream><br />#include <string><br /> <br />usingnamespacestd;<br /> <br />char &get_val(string &str, string::size_type ix)<br />{<br /> return str[ix];<br />}<br /> <br />int main()<b原创 2010-08-18 15:36:00 · 2137 阅读 · 0 评论 -
typedef简化多维数组定义
<br />#include <iostream><br /> <br />using namespace std;<br /> <br />typedef int int_arr[4];<br /> <br />int main()<br />{<br /> int ia[3][4] = <br /> {<br /> {0, 1, 2, 3},<br /> {4, 5, 6, 7},<br /> {8,原创 2010-08-17 09:27:00 · 883 阅读 · 0 评论 -
异常/调试
<br />#include <iostream><br />#include <bitset><br />#include <stdexcept><br /> <br />using namespace std;<br /> <br />int main()<br />{<br /> bitset<33> bs;<br /> <br /> bs.set();<br /> <br /> try {<br /> bs.to_原创 2010-08-17 09:24:00 · 656 阅读 · 0 评论 -
在C++中一个类对象究竟占用多少内存
<br />很多C++书籍中都介绍过,一个Class对象需要占用多大的内存空间。最权威的结论是:<br /> <br />*非静态成员变量总合。<br />*加上编译器为了CPU计算,作出的数据对齐处理。<br />*加上为了支持虚函数,产生的额外负担。<br /> <br />介绍完了理论知识后,再看看再找一个例子看看(注:一下所有结果都是在VC6.0 开发环境中得出的结论)<br /> <br />一、空类的Size<br /> <br />class Car<br />{};<br /> <br />转载 2010-08-18 14:55:00 · 1607 阅读 · 2 评论 -
c++引用的内部机制
<br />Q1:引用是别名,引用必须初始化。为什么必须被初始化呢?<br /><br />Q2:将地址运算符作用于引用:<br /> #include <iostream><br /> using namespace std;<br /> <br /> int main()<br /> {<br /> int a=2;<br /> int& r_a=a;<br /> <br /> cout<<"&a="<转载 2010-08-18 14:53:00 · 1042 阅读 · 0 评论 -
c_str()使用举例
/*** 编写程序读入一组string数据,并将它们存储在vector中,接着,把该vector对象复** 制给一个字符指针。为vector中的每个元素创建一个新的字符数组,并把vector元素** 的数据复制到相应的字符数组中,最后把指向该数组的指针插入字符指针数组*/#include #include #include #include using namespace std;int main() { vector svec; string str; while(cin >> str原创 2010-08-15 17:31:00 · 2311 阅读 · 0 评论 -
c/c++内存分区
<br />在C++中,内存分成5个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。<br /> 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。<br /> 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。<br /> 自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似转载 2010-08-15 09:05:00 · 1761 阅读 · 2 评论 -
string对象存储
<br />#include <string> <br /> <br />int main() <br />{ <br />int i; <br />string s( "1213213"); <br />string t; <br />t = s; <br />} <br /> <br />s和t存储在哪里?<br />stack or heap ?<br /> <br />都是在栈里,但是,string对象的内容实在堆中。<br />也就是说string对象内部的m_data保存的数据是在堆中。<br转载 2010-08-15 08:45:00 · 964 阅读 · 0 评论 -
const在c/c++中的区别
C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中.所以,以下代码:<br />#include <iostream><br />using namespace std;<br />int main()<br />{<br /> const int a = 1;<br /> const int b = 2;<br /> int array[ a + b ] = {0};<br /> for (int i = 0;原创 2010-08-12 16:21:00 · 5684 阅读 · 1 评论 -
动态绑定--实例
<br />#include <iostream><br />#include <string><br /> <br />usingnamespacestd;<br /> <br />class Item_base<br />{<br />public:<br /> Item_base(const string &book = "", double sales_price = 0.0) :<br /> isbn(book), price(sales_price) {}<br />原创 2010-08-31 16:17:00 · 1701 阅读 · 0 评论