C++(6)-虚函数(与继承搭配)

继承with virtual functions

  • 非虚函数:不希望子类重新定义(override)它;
  • 虚函数:希望子类可以重新定义它,并且你已经有一个默认的定义了—子类可以自己重新定义,也可以不定义
  • 纯虚函数:希望子类 一定 要重新定义它,对它没有默认定义
    在这里插入图片描述
    **纯虚函数draw() :**你们继承之后,必须重新自己定义一个draw(),因为我不知道该怎么画,你们自己画自己搞。

设计模式Template Method

MFC
在这里插入图片描述
可以在多年之后,框架依旧可以用,很健壮性啊

上图注意this指针的意义,this->Serialize()就跑到Application 类CMYDoc中了 这里的this就是myDoc

继承与复合关系下的构造和析构

在这里插入图片描述

对于第一种关系
先执行父类构造函数,再执行复合类的构造函数,最后执行本类的构造函数。而析构次序反之
代码如下:

#include <iostream>
using namespace std;
class Base
{
public:
    Base()
    {
        cout << "ctor of base" << endl;
    }
    ~Base()
    {
        cout << "dtor of base" << endl;
    }
};
class Component
{
public:
    Component()
    {
        cout << "ctor of component" << endl;
    }
    ~Component()
    {
        cout << "dtor of component" << endl;
    }
};
class Derived : public Base
{
public:
    Derived()
    {
        cout << "ctor of derived" << endl;
    }
    ~Derived()
    {
        cout << "dtor of derived" << endl;
    }
protected:
    Component c;
private:
};
void objectplay(void)//通过调用这个函数观察对象的析构与构造函数
{
    Derived d;
}
int main()
{
    objectplay();
    system("pause");
    return 0;
}

结果:

在这里插入图片描述

对于第二种关系
先执行Component的构造函数,再执行Base的构造函数,最后执行Derived的构造函数,最里面的函数先被调用
代码如下:

#include <iostream>
using namespace std;

class Component//组件
{
public:
	Component()
	{
		cout << "ctor of component" << endl;
	}
	~Component()
	{
		cout << "dtor of component" << endl;
	}
};

class Base//父类
{
public:
	Base()
	{
		cout << "ctor of base" << endl;
	}
	~Base()
	{
		cout << "dtor of base" << endl;
	}
protected:
	Component c;
};

class Derived : public Base//子类
{
public:
	Derived()
	{
		cout << "ctor of derived" << endl;
	}
	~Derived()
	{
		cout << "dtor of derived" << endl;
	}

private:
};
void objectplay(void)//通过调用这个函数观察对象的析构与构造函数
{
	Derived d;
}
int main()
{
	objectplay();
	system("pause");
	return 0;
}

结果:
在这里插入图片描述
代码参考

设计一个窗口观察多个内容的功能,利用delegation:
在这里插入图片描述
重要语句:vector <Observer*>m_view;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值