虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
来源:互联网 发布:代理ip软件 领导者 编辑:程序博客网 时间:2024/05/16 06:03
虚函数:虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。是C++中多态性的一个重要体现,利用基类指针访问派生类中的成员 函数,这种情况下使用虚函数,这种情况下采用的是动态绑定技术。
虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:
virtual 函数返回值类型 虚函数名(形参表){ 函数体 }
动态绑定:基类指针是调用派生类的中的成员函数还是调用基类中的成员函数要到程序运行时确定。主要要看指针所指向的对象。
纯虚函数:纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”
virtual void funtion1()=0
虚基类、抽象类:包含纯虚函数的类称为抽象类。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。
虚函数继承:
虚函数继承就是覆盖。即基类中的虚函数被派生类中的同名函数所覆盖。 是实现多态的方法。
class parent
{
public:
vitual void foo(){cout < <"foo from parent";};
void foo1(){cout < <"foo1 from parent";};
};
class son:public parent
{
void foo(){cout < <"foo from son";};
void foo1(){cout < <"foo1 from son";};
};
int main()
{
parent *p=new son();
p->foo();
p->foo1();
return 0;
}
其输出结果是:
foo from son,foo1 from parent
虚继承:
解决多重继承中派生类成员函数调用模糊问题。比如类A中有一个函数print(),类B继承A,类C继承A,类D继承类B和类C,这个时候,类D中就有两个print函数,一个是 从B继承得到的,一个是从C继承得到的,则,类D的对象调用print函数就会出现print模糊的编译错误。解决办法:类B虚拟继承A。类C虚拟继承A,类D继承B,C时,只拷 贝A中的数据成员和函数成员一次,再遇到拷贝时候就忽略了!
虚继承就是为了节约内存的,他是多重继承中的特有的概念。适用与菱形继承形式。
如:类B、C都继承类A,D继承类B和C。为了节省内存空间,可以将B、C对A的继承定义为虚拟继承,此时A就成了虚拟基类。
class A;
class B:public vitual A;
class C:public vitual A;
class D:public B,public C;
- 虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
- 虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
- 虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
- 虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
- C++多重继承、纯虚函数和抽象类
- 抽象类的继承/纯虚函数的实现
- 多重继承和多继承、虚函数、纯虚函数、抽象类、接口类
- 继承和纯虚函数
- 虚函数继承、虚继承、虚析构函数、纯虚函数
- 0630第五讲继承(4)抽象基类、纯虚函数、多继承
- 虚函数、纯虚函数、虚继承、多继承
- 虚函数 虚继承 抽象类
- 多重继承中的纯虚函数“妙用”
- 多继承与纯虚函数接口
- 纯虚函数 抽象类
- 纯虚函数,抽象类
- 纯虚函数+抽象类
- 虚函数,纯虚函数,抽象类
- UVa 10905 - Children's Game
- 在Java下使用NTP获取时间
- 无线wifi的畅想(嵌入式)
- 中间的view 的显示不正常,高度没有 wrap_content 而是 fill_parent
- 楼教主男人八题之poj1743
- 虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
- linux cpufeq相关知识
- Mozilla推出火狐21,增加了HTML5支持Android
- vs2010中使用 time_t要注意的地方
- SD/MMC 内部寄存器及上电时序
- java中多线程 内存模型和数据同步的一些要点
- 数据列表DataList模板之实例
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数---百度笔试题
- HDU-4445(CRAZY TANK枚举)