C++由于基类指针可以指向不同的派生类对象,因此当赋予基类指针不同的地址时,要注意之前的派生类对象的内存释放。int main(){
Parent* ptr = new Child1;
Child2 myChild2;
Child3 myChild3;
ptr->show();
delete ptr; //位置1
ptr = &myChild2;
ptr->show();...
分类:
编程语言 时间:
2015-05-27 19:15:40
阅读次数:
792
C++明确指出:当派生类对象是由一个基类指针释放的,而基类中的析构函数不是虚函数,那么结果是未定义的。其实我们执行时其结果就是:只调用最上层基类的析构函数,派生类及其中间基类的析构函数得不到调用。 1 #include 2 3 using namespace std; 4 5 class Ti...
分类:
其他好文 时间:
2015-05-24 17:01:51
阅读次数:
126
在C++中,多态表示 “以一个公有基类的指针或引用,寻址出一个派生类对象” 。假如有调用 ptr->get_c() ,其中ptr是基类指针,get_c()是一个虚函数。要在执行期能正确调用get_c()的实例,我们需要知道: 1.ptr所指对象的真正类型,以便我们选择正确的get_c()实例。 .....
分类:
其他好文 时间:
2015-05-21 18:42:25
阅读次数:
127
析构函数何时该时虚拟的? 当你可能通过基类指针删除派生类对象时。 虚函数绑定到对象的类的代码,而不是指针/引用的类。如果基类有虚析构函数,delete basePtr时(译注:即基类指针),*basePtr 的对象类型的析构函数被调用,而不是该指针的类型的析构函数。这通常是一件好事情。以上摘...
分类:
其他好文 时间:
2015-05-18 20:43:17
阅读次数:
125
基本概念 虚函数是在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为: virtual 函数返回类型 函数名(参数表) {函数体}; C++中用它来实现多态性,通过指向派生类的基类指针或...
分类:
编程语言 时间:
2015-05-13 13:18:14
阅读次数:
216
#include
using namespace std;
//代理模式中注意代理虽然可以实现某个功能,但是代理并不具备该功能,它的实现是通过调用别人的功能
//至于具体哪个功能,多态中基类指针指派生类对象,指向哪个派生类,就去调用哪个派生类的fun函数
class Base
{
public :virtual void fun()=0;
virtual ~Base(){}
...
分类:
编程语言 时间:
2015-04-25 15:15:54
阅读次数:
162
1,直接用基类指针引用基类对象
2,直接用派生类指针引用派生类对象
3,用基类指针引用一个派生类对象,由于派生类对象也是基类的对象,所以这种引用是安全的,
但是只能引用基类成员。若试图通过基类指针引用那些只在派生类中才有的成员,编译器会报告语法错误。(解决该问题的答案是虚函数和多态性)
4,用派生类指针引用基类的对象。这种引用方式会导致语法错误。派生类指针必须先强制转换为基类指针,这种方法...
分类:
编程语言 时间:
2015-04-10 18:08:57
阅读次数:
121
1。虚析构函数: 构造函数不能是虚函数。建立一个派生类对象时,必须从类 层次的根开始,沿着继承路径逐个调用基类的构造函数 析构函数可以是虚的。虚析构函数用于指引 delete 运算符正 确析构动态对象2. 定义了基类虚析构函数,基类指针指向的 派生类动态对象也可以正确地用delete析构...
分类:
编程语言 时间:
2015-03-13 23:46:06
阅读次数:
189
1.基类指针虽然获取派生类对象地址,却只能访问派生类从基类继承的成员 1 #include 2 using namespace std; 3 4 //通过基类指针只能访问从基类继承的成员 5 class A 6 { 7 public: 8 A(char x) 9 {10 ...
分类:
编程语言 时间:
2015-03-13 23:45:23
阅读次数:
229
1基类指针和派生类指针与基类对象和派生类对象4种可能匹配: 直接用基类指针引用基类对象; 直接用派生类指针引用派生类对象; 用基类指针引用一个派生类对象; 用派生类指针引用一个基类对象。2.基类指针引用派生类对象例如:A * p ; // 指向类型 A 的对象的指针A A_obj ; // ...
分类:
编程语言 时间:
2015-03-13 23:40:57
阅读次数:
193