class D_class:public B_class{
。。。
}
;
//
D_class
由
B_class
派生。
B_class *p, B_ob;
D_class *dp, D_ob;
p=&B_ob;
p=&D_ob;
//
此处可以引用,即基类的指针能作为派生类的引用。
p->put_author("William Shakespeare.");
//
可以直接调用基类中的成员函数
((D_class *)p) ->put_title("The Tempest");
//
需要类型转换才能调用派生类中的成员函数
虚函数是
C++
中用于实现多态
(polymorphism)
的机制。核心理念就是通过基类访问派生类定义的函数。虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。
--------msdn
一般要求基类中说明了虚函数后,派生类说明的虚函数应该与基类中虚函数的参数个数相等,对应参数的类型相同,如果不相同,则将派生类虚函数的参数的类型强制转换为基类中虚函数的参数类型。
virtual void show_area()=0;
//
纯虚函数的调用,必须有实义的对应的成员函数
//
例子
1
用
class
定义一个模板函数
template <class X> void swapargs(X &a, X &b){}
// 例子 2 用 typename 定义一个模板函数
template <class X> void swapargs(X &a, X &b){}
// 例子 2 用 typename 定义一个模板函数
template <typename X> void swapargs(X &a, X &b){}//
模板的应用
//
例子
3
定义两个类型的模板函数
template <class type1, class type2>
template <class type1, class type2>
void myfunc(type1 x, type2 y){}
//
例子
4
定义模板函数,且特定义一个特例
//template <class X> void swapargs(X &a, X &b){ }
template <typename X> void swapargs(X &a, X &b){ }
template<> void swapargs<int>(int &a, int &b)
{}
//
例子
5
重
载
模板本身
template <class X> void f(X a)
{
}
template <class X, class Y> void f(X a, Y b)
{ }
//
例子
6
返回模板
template <class X>
X myabs(X val)
{ }
//
通用类
template <class Type1, class Type2>
class myclass{
Type1 i;
Type2 j;
public:
myclass(Type1 a, Type2 b) { i=a; j=b; }
void show() { cout<<i<<' '<<j<<'/n'; }
};
template <class Type1, class Type2>
class myclass{
Type1 i;
Type2 j;
public:
myclass(Type1 a, Type2 b) { i=a; j=b; }
void show() { cout<<i<<' '<<j<<'/n'; }
};
int main()
{
myclass<int, double> ob1(10, 0.23);
myclass<char, char *> ob2('X', "This is a test.");
………
{
myclass<int, double> ob1(10, 0.23);
myclass<char, char *> ob2('X', "This is a test.");
………
//
template <class AType, int size>
class atype{ };
class atype{ };
template <class AType, int size>
AType &atype<AType, size>::operator [](int i)
{ }
AType &atype<AType, size>::operator [](int i)
{ }
//--
程序#
12
通用
类
的
显
式特例化
template <class T>
class myclass{ };
template <class T>
class myclass{ };
template<> class myclass<int>{
};