瞎扯一段,讲得不一定对.纯属学习! struct BB{ void a(){ cout << "bb's a()\n"; }}; struct B1 : public BB{}; struct B2 : public BB{}; struct CC : virtual public B1,public B2{ CC() { a(); // 调用a函数,编译不过,需这样调B1::a();B2::a();BB::a(); }}; 在上述代码中,struct CC的构造里调用a(…
2010年的最后一天了,转载一篇自己认为还不错的文章与大家分享.希望对大家有所帮助. 一,回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢? 使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数. 而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利…
向CUDA project中添加了如下的包含目录后: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include; ..\include_p; ..\include_p\gdal; ..\include_p\mysql; ..\include; ..\include_cg; $(IncludePath) 在main.cu中添加如下包含文件: #include <stdlib.h> #include <stdio.h>…
如果想让你的类定义出来的对象是独一无二的,即对象无法被复制,或者使用赋值操作符赋给另外一个对象,那么最好的方法就是禁用拷贝构造函数和赋值操作符.下面介绍几种禁用的方法.(方法来自Effective C++,如果想禁用类的其他函数,方法类似)   1. 定义为private且不实现它 我们知道,拷贝构造函数和赋值操作符重载函数,即使不定义,编译器也会生成一个默认的函数.但是如果定义了,class还是会支持这两个函数.那么应该怎么去禁用它们呢? 在C++中,如果不想让对象调用某个方法,那么可以将这个…
思考:为什么函数模板能够和函数重载放在一块.C++编译器是怎样提供函数模板机制的? demo 1 #include <cstdio> #include <iostream> using namespace std; // 1.cpp // g++ -S 1.cpp -o 1.s template <typename T> void myswap(T &a, T &b) { T c = 0; c = a; a = b; b = c; cout <&l…
(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 通常如果你不希望class支持某一特定机能,只要不声明对应函数就是了.但这个策略对copy构造函数和copy assignment操作符却不起作用,你如果不声明它们,而某些人尝试调用它,编译器会为你声明它们. 这把你逼到了一个困境.如果你不声明copy构造函数和copy assignment操作符,编译器可能为你产出一份,于是你的clas支持copying.如果…
函数二义性是一种编译时发生的错误,造成二义性调用的原因 是在函数匹配时两个或多个函数提供的匹配一样好,编译时找 不到唯一的最佳匹配. 列: #include <iostream> using namespace std; ) { return a + b; } int fun(int a) { return a * a; } int main() { ; cout << fun(a); ; } 在此程序中,fun函数出现二义性, 出现有多个 重载函数 "fun"…
转载请注明出处,版权归作者所有 lyzaily@126.com yanzhong.lee 作者按: 从这篇文章中,我们主要会认识到一下几点: 一.不类中的特征标相同的同名函数,它们是不同的函数,原因就是类具有"名称空间"的功能: 二.类的对象是不包含类声明中所提到的成员函数所占的内存,对象只包含类声明中非static成员数据,如类声明中有虚函数,则对象还会有个vtbl指针.同一个类的所有对象都是使用同一份成员函数拷贝. 三.VS编译器是如何实现函数的重载的,以及如何使用this指针的.…
正如第一章所说:C++的函数是一个能够完成一个功能的模块或者说是一段命名了的代码块. 如下图所示,函数可以重载,是一段实现某些功能命名了的代码. 一个完整的函数的构成有四部分: 1.返回类型 2.函数名 3.形参 4.函数体 对于返回类型来说,return语句返回的类型必须和返回类型一致,或者可以转换. 对于函数名来说,允许多个函数使用相同的名字,当参数不同时,形成重载.对函数名使用调用运算符,则执行函数. 对于形参来说,可以是传值的,也可以是传引用的. 对于函数体来说,必须是在一对花括号包围的…
1.内联函数 1.1.常量与宏的回顾 (1)C++中的 const 常量可以替代宏常数定义,如: ; //等价于 #define A 3 (2)C++中是否有解决方案,可以用来替代宏代码片段呢? 1.2.内联函数的定义 (1)C++编译器可以将一个函数进行内联编译,被 C++编译器内联编译的函数叫内联函数. (2)C++中使用 inline 关键字声明内联函数.如 inline int func(int a, int b) { return a < b ? a : b; } (3)内联函数声明时…