相关推荐
-
C++类模板中如何调用其基类模板中的函数(模板中使用虚函数)
测试: 原因:见2.C++模板的名字查找如何解决呢?在编译模板的时候,编译器会分两个阶段去解析遇到的名称, 测试: eg:类模板而言 因为f()不依赖与模板参数T,所以它在第一阶段就会被解析,而它的基类X在第二阶段才会被解析,所以解析f()的时候只能看到全局作用域里的typedef double E 测试: eg: 测试: (1)第一种方式调用了全局的g(), (2)第二种方式调用了基类的g(), (3)原因在于当编译器遇到第一种方式的g()时,发现它没有表现出要依赖于模板参数,所以认为它不依
-
模板类可以使用虚函数,模板函数不能是虚函数
1、普通的类中怎么使用虚函数,模板类中也可以这么使用虚函数 不过需要注意的是使用模板类定义不同的类型则是两个完全不同的类。2、模板函数不能是虚函数 编译器期望在处理类定义的时候就能确定虚函数表的大小,如果允许有类的虚成员模板函数,那么就必须要求编译器提前知道程序中国有对该类的该虚成员模板函数的调用,而这时不可行的。 实例化模板类时,需要创建virtual tabl...
-
c++学习记录-1
当一个类声明为虚函数时,它会在编译时生成一个虚函数表(vtable),vtable是一个数组,存储了类中所有虚函数的地址。当调用虚函数时,程序会根据对象所指向的vtable中的地址来调用函数,实现动态绑定。虚函数是在基类中声明的、带有virtual关键字的成员函数,它可以被派生类重写(覆盖)并在运行时动态地绑定到相应的函数代码。模板成员函数不能是虚函数的原因是,模板函数的实例化是在编译时进行的,而虚函数的调用是在运行时进行的。因此,模板函数的虚函数表在编译时是未确定的,无法在运行时进行虚函数的动态绑定。
-
虚函数、模板
虚函数 代码 using namespace std; class ABase { public: virtual void init(); }; void ABase::init() { cout << "load ABase" << endl; } class A : public ABase{ public: void init();...
-
c++杂记
1:类模板可以使用虚函数,但类模板成员函数不可以是虚函数(因为编译器无法确定存在多少虚函数) 2:复合类型:基于其他类型定义的类型(如:指针、引用); 3:顶层const和底层const(指针中的概念):顶层const指修饰指针本身,底层const修饰实际指向的; int a = 0; int const * const p = &a; auto pp = p;//pp的类型是 ...
-
模板类中可以使用虚函数吗?模板成员函数可以是虚函数吗?
内容转载自csdn论坛。 1,模板类中可以使用虚函数。 完全一样, 在非模板类里怎么用虚函数, 就在模板类里怎么用 template class class A { public: virtual void f1(){cout virtual void f2()=0{cout }; template class class B: public A {
-
用模板实现虚函数功能
下面的例子演示了用模板继承,可以避免使用virtual函数却可以同样达到override的效果。不需要vtable。 但是也有缺点:不能再被其他类继承来实现override。 #include <iostream> using namespace std; template <typename T> class Base { public: void fun...
-
C++的继承(八):模板和虚函数
我们知道包含基类的成员和继承的作用是相同的,如果没有用到虚函数和受保护的成员的话。 现在,一个对话框包含两个button,既然能够用成员变量来实现,那么用继承来实现当然是没问题。 class SystemButton {}; class Button1 : public SystemButton { public: virtual OnButtonClick1() { printf("button 1 click\n"); } }; class Button2 : public Sys
-
在C++中用虚函数及模版实现委托(支持自定义参数)
#include "stdio.h"class CObject{};class Event{ public: unsigned long EventType; public: Event(unsigned long EventType) { this->EventType = EventType; }};class Handler{ public: v
-
模板成员函数为什么不能是虚函数
《Thinking in C++》volume 2第五章有这么一句话: Member template functions cannot be declared virtual.Current compiler technology experts to be able to determine the size of a class’s virtual function table when t
-
static_cast在ATL中很常见.它是实现模版形式多态的关键.
static_cast在ATL中很常见.它是实现模版形式多态的关键. 比如: template class CTest:public T { .... void SomeMethod() { T *pT = static_cast (this); pT-> BaseMe
-
C++:05.虚继承、虚函数、模板函数、模板类
19.虚继承、虚函数、模板函数知识点:1. 属性初始化2. 多继承,(在 java 里面是不允许多继承的, c++ 是可以的, 但是你也不能有二义性(歧义))3. 虚继承(二义性)4. c++ 中的多态5. 纯虚函数(类似于:java 中的 抽象类,接口)6. 构造函数和析构函数7. 模板函数(java 中的泛型) 知识点: 1. 属性初始化 class Student: public Person{ private: // char* courseName; Course course;
-
纯虚函数和模板函数
//纯虚函数(抽象类) //1.当一个类具有一个纯虚函数,这个类就是抽象类 //2.抽象类不能实例化对象 //3.子类继承抽象类,必须要实现纯虚函数,如果没有,子类也是抽象类 //抽象类的作用:为了继承约束,根本不知道未来的实现 //形状 /* class Shape{ public: //纯虚函数 virtual void sayArea() = 0; void print(){ co
-
virtual function的一些心得
virtual function是design上一个非常好的东西,它可以在保持面向接口编程的前提下做到运行时刻动态决定使用某一种实现。而且使得代码的语义表达,设计美感都好很多。问题就是virtual function太费了。对于pc平台来说,它是乱序执行的cpu,cache miss还可以忍受,对于console平台,这种顺序执行的处理器,cache miss会带来非常大的性能损失。
-
【C++】template vs virtual function
泛型编程和抽象接口都能达到代码重用和接口抽象的作用,STL是泛型编程的代码,而设计模式里面遍布了各种抽象接口,对于同样的问题,两种方法都能实现。比如,我要实现一个锁类,泛型会这样实现:class CMutex{ public: CMutex(pthread_mutexattr_t* attrs = 0) { pthread_mutex_ini
-
虚函数实现原理
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不...
4 楼 poshboytl 2009-12-04 11:47
另外它的view用的是haml,如果用那个来写一些复杂的页面,估计直接就晕死.
为什么haml不能写复杂的页面?
haml本来就是把复杂的东西变简单,简洁的. 所以写复杂的东西更有优势.
而且现在的haml的性能已经很不错了...
3 楼 yangzhihuan 2009-12-03 23:54
另外它的view用的是haml,如果用那个来写一些复杂的页面,估计直接就晕死.
2 楼 花花公子 2009-12-03 21:20
1 楼 wangxin0072000 2009-12-03 16:45