![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
A - C/C++语言
burningcpu
这个作者很懒,什么都没留下…
展开
-
C语言中const修饰变量和指针
const型的变量是不能被程序修改的,但是确可以被赋予初始值。编译程序把这类变量放入只读区域。如:const int a = 10;生成名为a的整形变量,程序不能修改其内容。 如果是和指针一起使用那么要注意,该指针指向的内容是不能被修改的。 下面的代码说明了 const char *str的作用: #include void sp_to_dash(const c原创 2007-08-28 23:37:00 · 783 阅读 · 0 评论 -
如何在类中建立恒定的常量
有时候,一个类的所有对象都共享相同的数据,这样节约存储,不需要在每个类实例化后都放相同的数据。那么有哪些方法来实现呢? 1 使用static const, static表示只为一个编译单元。class A {public:static const int SIZE1 = 10; //VC不支持static const int SIZE2 = 5;private:int arr原创 2008-01-02 21:38:00 · 1388 阅读 · 0 评论 -
函数指针调用类成员函数的解决方案
如果碰到在一个类中通过函数指针调用成员函数的要求。比如:在一个类中使用了 STL的排序函数qsort时,因qsort参数需要一个比较函数指针,如果这个类使用某个成员函数做比较函数,就需要将这个成员函数的指针,也就是成员函数名,传给qsort供其调用。 如以下三种情况就会出现编译错误: 1 将类的成员函数指针赋予同类型非成员函数指针#include#includety原创 2008-04-06 13:42:00 · 1790 阅读 · 1 评论 -
C++细节---序言
C++是一门复杂的计算机语言,没有C语言简洁,也没有Java、C#的简单。正是因为这个原因,我们才喜欢她,喜欢她的弱点和强大的功能,也许天使并不完美,正是由于不完美让让人神往。 我最早学习的就是C++语言,但是当时大一的时候本身对于计算机的领悟就有限,不可能对C++有深入了解,甚至可以说完全不了解。之后,我开始使用C语言,编写实践了大量的数据结构,但也是为了应付考试,并没有用C语原创 2008-07-11 00:44:00 · 358 阅读 · 0 评论 -
C++细节之一----3种参数传递方式的使用场景
对于参数传递,有3种方式:a 传值 b 传引用 c 传指针 如果是基本数据类型,那就传值,如果是传递大的对象,那当然是传引用。而对于引用来说,是赋了值后就不会改变的,应该加const, (const &a). 如果函数体要改变这个对象,那就传指针。这是一个结论,以下说明原因。 将实参传递给形参,需要赋值操作,对于基本数据类型,当然是很快的,但是对于大的对象来说,赋值就是个性能的瓶颈原创 2008-07-11 01:06:00 · 535 阅读 · 0 评论 -
C++细节之二---注意函数的返回值
似乎从来没有犯过返回值还出问题的错误,一般来说,一个函数结束后,会在函数指针出开辟一块内存存放返回值,这也是函数生命周期结束返回值以来存在的原因。没有犯过这种错误是因为,我们很少写返回const XXX &,也就是当返回值是一个大对象的引用的时候,我们经常容易犯这种错误。 和参数传递一样,函数的返回也包含3种,按值返回,按常量的引用返回,按地址返回。其中按地址返回就是返回一个指针了。原创 2008-07-11 01:45:00 · 636 阅读 · 0 评论 -
C++细节之三----当类中含有指针成员时
当类中包含指针成员,有一些问题要注意,比如,默认的析构函数要释放对象,并不会删除指针所指的内容,而只是删除指针,明显这就产生了内存泄露。为了解决这个问题,必须在构造函数上下功夫。就是实现三大函数,即:构造函数,拷贝构造函数,operator=。在这三个函数对指针所指内容进行深复制。这样做了之后,这个类的每个对象都单独的拥有这块内存。问题自然就解决了。 这个问题也可以引用《原创 2008-07-17 22:52:00 · 591 阅读 · 0 评论 -
从printf()看可变参数函数
1. 使用情形 int a =10;double b = 20.0;char *str = "Hello world";printf("begin print/n");printf("a=%d, b=%.3f, str=%s/n", a, b, str);... 从printf的使用情况来看,我们不难发现一个规律,就是无论其可变的参数有多少个,printf的第一个参数总是转载 2008-07-21 15:36:00 · 457 阅读 · 0 评论 -
C语言获取文件后缀名
#include #include //求子串 char* substr(const char*str, unsigned start, unsigned end){ unsigned n = end - start; static char stbuf[256]; strncpy(stbuf, str + start, n);原创 2008-09-04 15:11:00 · 5119 阅读 · 1 评论 -
如何修改const常量的值
看到这个标题,你也许会说,我不懂const, 因为Const修饰的是不可变得变量,他的值是不能修改的。没错,const修改的值的确不能修改,但是也有条件,条件就是编译不能通过,const是一个编译时期常量。如果我能在绕过编译器,通过编译后,我仍然可以修改const的值。 分C/C++两种情况讨论: 一 C语言: const long lng=10;原创 2008-01-02 17:54:00 · 4229 阅读 · 3 评论 -
详解C++虚函数表
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函转载 2007-12-19 21:48:00 · 1029 阅读 · 0 评论 -
冒泡排序的多种实现
冒泡排序的思想,是不停的交换,有2层循环,第一层循环说明的是比较的次数,第二层循环是比较的趟数。 1 是用数组实现(C):#includevoid main(){ int array[] = {45,56,76,234,1,34,23,2,3}; int temp; for(int i=0;i { for(int j=0;j { if(array[j]>ar原创 2007-09-19 23:40:00 · 735 阅读 · 0 评论 -
const修饰对象,成员函数,成员变量
const表示常量,意思就是说,被它修饰的对象,成员函数,成员变量,在整个程序运行期间,它的值得保持不变,如果你在程序中改变它,编译器将会报错。 如下面程序:#include void display(const double &r);void main(){ double d(9.5); display(d);}void display(const doubl原创 2007-10-17 00:05:00 · 1155 阅读 · 0 评论 -
分析C++中友元实现数据共享
在C++中,为什么要引入友元的概念呢?主要是为了实现数据共享,提高程序效率,方式就是避免过多的函数调用。请看以下实例:#include#includeclass Point{public: Point(int xx,int yy) { X=xx; Y=yy; } int GetX() { return X; } int GetY() { return Y; } friend fl原创 2007-10-21 01:42:00 · 980 阅读 · 0 评论 -
拷贝构造函数使用情况
在C++中,有一个拷贝构造函数的概念,当一个对象通过构造函数初始化之后,如果需要一个和它一样的对象,这个对象是临时的,比如:1 函数返回一个对象,这个对象就是一个拷贝;2 对象做函数的形参,传过来的实参对象就是一个拷贝。3 用一个同类对象去初始化另一个对象时候,Point A(1,2),Point B(A). B对象就是通过拷贝构造函数产生的。 一般来说,拷贝构造函数是默认的,系原创 2007-10-16 15:25:00 · 711 阅读 · 0 评论 -
总结static用法
在C语言里,static用来修饰局部变量和全局变量。如果是修饰局部变量,那么这个值在函数调用完之后并不马上清除,而是保存它的值,可以用来做计数器。如果是用来修饰全局变量,主要目的是为了让别的文件不能使用这个变量。碰到多个程序员共同完成一个项目,可能会碰到全局变量重名的情况就解决了。顺便提一下,如果这个变量可以被外部应用,那么使用extern修饰。编译器碰到extern,它就知道这个变量在其原创 2007-10-16 22:59:00 · 634 阅读 · 0 评论 -
四种对象四种存储方式
原创 2008-02-27 20:21:00 · 1279 阅读 · 0 评论 -
关于main(),让程序可以执行命令行参数
MS C++/C应用程序的启动函数为mainCRTStartup()或者WinMainCRTStartup(), 他们都在这个函数内部定义了main()函数,或者WinMain(),然后以他们的返回值为参数调用库函数exit(),因此也就默认了main()应该作为它的连接对象,如果找不到这样的函数定义,自然就会报错了。 main()其实就像是一个回调函数。 基于应用原创 2007-12-17 17:52:00 · 895 阅读 · 0 评论 -
深入解析C++构造函数
1 带有default Constructor的Member Class Object2 带有Default Consturctor的Base Class3 带有一个Vitual Function的Class4 带有一个Virtual Base Class的Class原创 2008-03-09 22:36:00 · 1019 阅读 · 0 评论 -
C++细节五:避免产生临时(隐式)对象
产生一个对象,如果这个对象很大并且这个对象是在一个循环里面产生的,是特别耗资源的,因为编译器要找到一块合适的内存,如果没有合适的还要整理磁盘碎片并合并为一块合适的对象存储区。因此,在编程中一定要小心的产生临时对象。 临时对象在C++语言中的特征是未出现在源代码中,从堆栈中产生的未命名对象。这里需要特别注意的是,临时对象并不出现在源代码中。即开发人员并没有声明要使用它们,没有为其声原创 2008-09-21 22:42:00 · 576 阅读 · 0 评论