虚函数相关内容
来源:互联网 发布:怎么淘宝介入 编辑:程序博客网 时间:2024/05/20 14:15
动态多态
名词 : 虚基类 虚继承(作用:菱形/多重继承) 纯虚函数 抽象类
#if 0
//虚继承作用:菱形继承只构造一次class A
{
public:
A(int a):ma(a){cout<<"A()"<<endl;}
~A(){cout<<"~A()"<<endl;}
private:
int ma;
};
////////////////////////////////////////////////
class B : virtual public A
{
public:
B(int a):A(a), mb(a){cout<<"B()"<<endl;}
~B(){cout<<"~B()"<<endl;}
private:
int mb;
};
class C : virtual public A
{
public:
C(int a):A(a), mc(a){cout<<"C()"<<endl;}
~C(){cout<<"~C()"<<endl;}
private:
int mc;
};
////////////////////////////////////////////////////////
// 多重继承
class D : public B, public C
{
public:
D(int a): A(a), B(a), C(a), md(a){cout<<"D()"<<endl;}
~D(){cout<<"~D()"<<endl;}
private:
int md;
};
int main()
{
//B bb(20);
//C cc(10);
D d(10);
return 0;
}
#endif
#if 0
//虚基类 有虚函数的基类
class Base
{
public:
virtual void show(){cout<<"Base::show"<<endl;}
virtual ~Base(){cout<<"~Base"<<endl;}
private:
int ma;
};
class Derive: virtual public Base // 虚继承
{
public:
void show(){cout<<"Derive::show"<<endl;}
~Derive(){cout<<"~Derive";}
private:
int mb;
};
int main()
{
Base *p = new Derive();
p->show();//Derive::show
delete p;//将析构函数写为虚函数
return 0;
}
#endif
#if 0
//有纯虚函数的类叫做抽象类
//抽象类和普通类唯一的区别就是 抽象类不能定义对象
class Animal
{
public:
Animal(string name):_name(name){}
virtual void bark() = 0; //纯虚函数
protected:
string _name;
};
class Dog : public Animal
{
public:
Dog(string name):Animal(name){}
void bark()
{
cout<<_name<<" wang wang!"<<endl;
}
};
class Cat : public Animal
{
public:
Cat(string name):Animal(name){}
void bark()
{
cout<<_name<<" miao miao!"<<endl;
}
};
int main()
{
Animal *p1 = new Dog("dog");
Animal *p2 = new Cat("cat");
int *pp1 = (int*)p1;
int *pp2 = (int*)p2;
int temp = pp1[0];//交换vfptr,this指针不变.调用的函数变了
pp1[0] = pp2[0];
pp2[0] = temp;
p1->bark();//dog miao miao
p2->bark();//cat wang wang
delete p1;
delete p2;
return 0;
}
#endif
含有虚函数的基类的内存分布
阅读全文
0 0
- 虚函数相关内容总结
- 虚函数相关内容
- 构造函数相关内容
- 进程通信函数的相关内容
- C++函数指针相关内容介绍
- 相关内容
- 关于函数句柄(@)的相关内容
- main函数执行之前的相关内容
- 谈谈Java中的构造函数的初始化及相关内容
- VC中加载套接字库的函数相关内容
- Swift的函数与函数指针、闭包Closure等相关内容介绍
- 深入浅出C++构造函数、析构函数、深浅拷贝的相关内容
- CXF相关内容
- HTTPS 相关内容
- LWUIT相关内容
- mysql相关内容
- ORACLE相关内容
- 傅里叶相关内容
- ReentrantReadWriteLock读写锁的理解与使用
- STM32的时钟系统RCC详细整理_20170731
- ZigBee 3.0 《Base-Device-Behavior-Specification》-- Environment variables
- 1029. 旧键盘
- 反射六
- 虚函数相关内容
- 破解可读不可复制的 U 盘
- Android高级组件
- webservice
- 51nod1116-取模&大数-K进制下的大数
- 使用Doxygen生成libevent document(2.0.15)--CHM格式
- 在Spring官网下载包记录
- 7.31更新(派生类与基类)
- linunx 下载文件到本地