- 浏览: 196328 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
在世界的中心呼喚愛:
思路很好
连连看全局消除算法 -
tianaozhu:
请问,我修改了词库和源文件怎么就不好用了, 我源文件是: My ...
自己动手开发翻译软件(Java版) -
Arlrn:
博主你好,最近在学习排序算法,看了你的博客,你的直接插入排序, ...
各种排序算法的实现及其比较 -
sharong:
有一个明显错误,很显然冒泡排序的时间复杂度是O(n^2)
各种排序算法的实现及其比较 -
julydave:
希尔排序不太对吧。。
各种排序算法的实现及其比较
1、重载:
只能靠参数而不能靠返回值类型的不同来区分重载函数。编译器根据参数为每个重载函数产生不同的内部标识符。
如void Test(int …);void Test(char…);void Test(float…); 编译器有可能会为这三个函数产生三个像_test_int、_test_char、_test_float 之类的内部标识符,当做不同的编译器可能产生不同风格的内部标识符,上面这种风格是我自己推测的。这也许就是重载的原理吧。
有一点需要注意的是,并不是函数名相同参数不同就能构成重载,如全局函数和类的成员函数同名就不算:
void Print(…); // 全局函数 class A {… void Print(…); // 成员函数 }
这时可以用::print(……) 来标识全局变量
还有,写重载时,不要写成如下形式:
void output( int x); void output( int x, float y=0.0);
这样的话,调用ouput(1); 就会报错。
2、extern “C”
举例:void foo(int x, int y);
该函数被 C 编译器编译后在库中的名字为_foo,而 C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用 C 函数。C++提供了一个 C 连接交换指定符号 extern“C”来解决这个问题。
例如:
extern “C”
{
void foo(int x, int y);
… // 其它函数
}
或者写成
extern “C”
{
#include “myheader.h”
… // 其它 C 头文件
}
这就告诉 C++编译译器,函数 foo 是个 C 连接,应该到库中找名字_foo 而不是找_foo_int_int。C++编译器开发商已经对 C 标准库的头文件作了 extern“C”处理,所以我们可以用#include 直接引用这些头文件。
3、重写与覆盖中的与“隐藏”相关的规则
3.1 如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(注意别与重载混淆)
3.2 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有 virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)
给个网上的例子
#include <iostream.h> class Base { public: virtual void f(float x){ cout << "Base::f(float) " << x << endl; } void g(float x){ cout << "Base::g(float) " << x << endl; } void h(float x){ cout << "Base::h(float) " << x << endl; } }; class Derived : public Base { public: virtual void f(float x){ cout << "Derived::f(float) " << x << endl; } void g(int x){ cout << "Derived::g(int) " << x << endl; } void h(float x){ cout << "Derived::h(float) " << x << endl; } };
void main(void) { Derived d; Base *pb = &d; Derived *pd = &d; // Good : behavior depends solely on type of the object pb->f(3.14f); // Derived::f(float) 3.14 pd->f(3.14f); // Derived::f(float) 3.14 // Bad : behavior depends on type of the pointer pb->g(3.14f); // Base::g(float) 3.14 pd->g(3.14f); // Derived::g(int) 3 (surprise!) // Bad : behavior depends on type of the pointer pb->h(3.14f); // Base::h(float) 3.14 (surprise!) pd->h(3.14f); // Derived::h(float) 3.14 }
如果语句 pd->f(10)一定要调用函数 Base::f(int),那么将类 Derived 修改为如下即可。
class Derived : public Base { public: void f(char *str); void f(int x) { Base::f(x); } };
4、用内联取代宏代码
预处理器用复制宏代码的方式代替函数调用,省去了参数压栈、生成汇编语言的CALL 调用、返回参数、执行 return 等过程,从而提高了速度。使用宏代码最大的缺点是容易出错,如:
#define MAX(a, b) (a) > (b) ? (a) : (b) //下面的语句 就会得不到自己想要的结果 result = MAX(i, j) + 2 ; //相当于 result = (i) > (j) ? (i) : (j) + 2 ;
宏还有一个缺点,就是无法操作类的私有数据成员。
这时可以考虑用内联函数
使用如下:
void Foo(int x, int y); // 先声明
inline void Foo(int x, int y) // inline 与函数定义体放在一起 , 不用放在声明上,这样比较规范一点
{
…
}
其实 内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。以下情况不宜使用内联:
(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。
5、将成员函数的定义体放在类声明之外
放在类声明之中虽然能带来书写上的方便,但不是一种良好的编程风格,应该改成如下形式:
// 头文件 class A { public: void Foo(int x, int y); } // 定义文件 inline void A::Foo(int x, int y) { … }
发表评论
-
连连看全局消除算法
2012-03-08 01:48 4387好久没写技术博客了。I ... -
object-c笔记一
2011-07-22 11:03 888(本笔记只是简单的记录,只给自己看) 接口的定义: ... -
VC2010中C++的右值引用新特性
2011-05-27 13:37 1509// RightValue.cpp : Defines ... -
linux下用命令编译/调试C++程序
2011-04-01 14:17 3035先安装gcc : sudo apt-get insta ... -
对Windows程序中设备上下文DC(device context)的理解(转)
2010-11-08 00:58 1647对Windows程序中设备上 ... -
MFC学习笔记(九)
2010-10-30 01:47 1381前面已经讲了够多的基础性的东西了,还有一些,但我想还是之后遇到 ... -
MFC学习笔记(八)
2010-10-30 00:55 1045MFC把早期的窗口类的功能分成三个部分:数据存储、管理部分,数 ... -
MFC学习笔记(七)
2010-10-28 01:29 969创建一个普通的Win32 Application,加上一个.c ... -
MFC学习笔记(六)
2010-10-28 01:16 1106先来了解几个类 1、CObject类 有相当一部分类的基 ... -
MFC学习笔记(五)
2010-10-27 01:55 1498早期的MFC应用程序框架结构由两个对象组成:应用程序类CWin ... -
MFC学习笔记(四)
2010-10-27 00:28 1204前面写了那么多代码,但很多东西都是固定的,我们需要写的主要是消 ... -
MFC学习笔记(三)
2010-10-26 14:54 1175这一次修改事件的处理函数,当鼠标左键按下时,可在窗口的用户区显 ... -
MFC学习笔记(二)
2010-10-26 14:31 1011上一篇写的是一个单窗口的程序,这一次写一个多窗口的程序,第一个 ... -
MFC学习笔记(一)
2010-10-26 14:21 1605之前也学过一点MFC的知识,但因很久没去碰就都忘 得差不多了。 ... -
高质量C++/C编程学习笔记(七)----- 其它
2010-10-24 10:29 8001、继承不要随便使用, ... -
高质量C++/C编程学习笔记(六)----- 构造 析构 赋值函数
2010-10-24 10:15 8361、当创建一个类时,C++ ... -
高质量C++/C编程学习笔记(四)----- 内存管理(2)
2010-10-22 00:46 11345、用指针参数传递内存 ... -
高质量C++/C编程学习笔记(三)----- 内存管理(1)
2010-10-22 00:17 11821、 三种内存分配方式 ... -
高质量C++/C编程学习笔记(二)----- 基础
2010-10-21 23:10 9431、在函数体的“入口处” ,用断言对参数的有效性进行检查。断言 ... -
高质量C++/C编程学习笔记(一)----- 入门
2010-10-21 01:05 1279学了这么久的C/C++,在 ...
相关推荐
C++是一种广泛使用的编程语言,尤其在系统软件、应用程序、游戏开发、设备驱动等领域...《C++ Primer》提供的学习笔记是初学者和进阶者都非常宝贵的资源,结合实际的编译器操作和错误调试,能够帮助你逐步精通C++编程。
通过学习,你可以提升自己的QT编程能力,开发出高质量、跨平台的应用程序。同时,提供的"QT高级编程视频教程-最强初级到高级编程开发丁林松--QT高级编程视频教程-最强初级到高级编程开发.txt"文本文件,很可能是课程...
### 高质量C++编程指南知识点总结 #### 1. 布尔变量的比较 在C++中,不应该直接将布尔变量与`TRUE`, `FALSE`或`1`, `0`进行比较。...以上总结了《高质量C++编程指南》中提到的关键知识点,希望对您的学习有所帮助。
以上知识点只是冰山一角,深入学习"高质量C/C++编程指南",结合作者的笔记和总结,将有助于你在C/C++编程领域达到更高的水平。记住,实践是最好的老师,不断编码、反思和改进是成为优秀程序员的必经之路。
《高质量程序设计指南:C++/C 语言(第三版)》是一本深入探讨软件开发质量和C++/C 编程规范的书籍...通过深入阅读和实践,读者将能够掌握编写高质量C++/C程序的技巧,并理解如何在实际开发中实施有效的软件工程方法。
《高质量C++编程指南》是一本深受欢迎的C++学习资料,特别适合初学者作为入门教程。这本书结合了丰富的编程经验和实例,旨在帮助读者掌握C++编程的核心概念、语法和最佳实践。通过阅读这本书和相应的笔记,学习者...
《高质量C++编程指南》是一本深受欢迎的C++学习资料,其中包含了丰富的编程实践经验和最佳实践。这本书的笔记部分尤为珍贵,它不仅涵盖了基础的语法和概念,还深入探讨了C++的高级特性和设计模式,对于提升编程技能...
### C++ 提高编程学习笔记:泛型编程与 STL 技术详解 #### 一、泛型编程概述 泛型编程是一种编程范式,通过在程序设计中使用参数化的类型来编写代码,使得同一段代码可以处理多种不同的数据类型。这种编程方式极大...
《C/C++编程思想》是一本面向初学者的宝贵资源,涵盖了C++语言的基础到高级概念,旨在帮助读者深入理解编程原理并掌握C++的核心特性。这个压缩包包含的PDF文件很可能包含了各种教程、笔记或者讲解,对于那些对C++...
在深入探讨"C++高级编程与个人学习思考应用"这一主题之前,我们首先了解下标签所指的"C++高级编程"涵盖哪些方面。C++是一种强大的、面向对象的编程语言,其高级特性包括模板、异常处理、命名空间、STL(标准模板库)...
这份"(强烈推荐大家看一看)高质量C++编程指南(有笔记)1"提供了丰富的资源,旨在帮助学习者提升C++编程技能,特别是在理解和应用方面。下面将详细讨论这份指南中可能涵盖的关键知识点。 1. **基础语法与数据类型**...
在深入探讨C++编程语言的学习经验之前,首先要理解C++是一种多范式、面向对象的编程语言,由Bjarne Stroustrup于1983年在C语言的基础上发展而来。它提供了丰富的特性,包括类、模板、异常处理、命名空间、函数重载等...
从给定的文件信息来看,标题与内容存在明显的不匹配,标题提到的是“高质量C++编程指南”,然而内容却是关于法语学习的笔记。这里,我们将重点放在标题和描述所暗示的知识点上,即C++编程的相关知识。 ### 高质量...
《新手C++学习笔记》是一份专为编程初学者打造的资源,旨在帮助那些刚刚踏入C++编程领域的“菜鸟”快速成长。这份笔记包含了前辈们的实践经验总结,具有很高的学习价值。文档以.doc格式存储,方便读者使用常见的文字...
### C++学习笔记知识点解析 #### 一、C++设计原则 C++作为一种高级编程语言,在设计时考虑了多个方面来确保其既能够满足高性能的需求,又能够支持现代软件开发的复杂性。以下是对C++设计原则的一些详细解析: 1. *...
这份笔记详细介绍了C++语言的基础知识、核心概念以及高级特性,旨在帮助读者掌握C++编程的核心技能。 C++是计算机科学中的一种强类型、编译型、静态类型的通用编程语言,由Bjarne Stroustrup在C语言的基础上发展而...
根据给定的文件信息,以下是对《C++编程思想》阅读笔记中提到的关键知识...以上就是从《C++编程思想》阅读笔记中提炼出的关键知识点,它们涵盖了从基础语法到高级编程概念的广泛内容,对于学习和理解C++语言至关重要。
在本节"Go语言学习(五)高质量编程与性能调优实战"中,我们将深入探讨如何利用Go语言的特性编写高效、可靠且可维护的代码,并掌握关键的性能优化技巧。Go语言,作为一种现代化的系统级编程语言,以其并发模型、垃圾...