①解决了如何在对话框中调用视图中菜单的响应问题:
思路很简单,找到活动的视图的句柄,然后PostMessage:
::PostMessage(((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveFrame()->GetActiveView()->m_hWnd,WM_COMMAND,IDM_CREATEWQREPORT,NULL);
②复习了C++中面向对象的一些概念:封装,多态,继承。
1.this指针:this指针指向当前对象。当不同的对象调用一个类中的方法,都是通过this指针进行辨别的:
编译之后:void setAge(int age) 变成 void setAge(int age,(Class*)this)
2.继承多态。
父类的指针指向子类的对象。多态通过virtual函数来实现,父类中的函数必须加virtual,子类中的函数可
加也可以不加,一般情况下还是加,这样方便说明这是一个virtual函数。
多态运用的简单实例:
//主函数
#include <iostream>
#include "Animal.h"
#include "Dog.h"
#include "Human.h"
#include "Cat.h"
using namespace std;
int main()
{
//CAnimal animal;
CCat cat;
CDog dog;
CHuman human;
CAnimal* animal[3] = { &cat , &dog , &human };
for (int i = 0; i < sizeof(animal)/sizeof(animal[0]); ++i)
{
animal[i]->animalShoot();
}
cin.get();
cin.get();
return 0;
}
#include "header.h"
#pragma once
class CAnimal
{
public:
CAnimal(void);
public:
~CAnimal(void);
private:
int _age;
public:
int getAge();
void setAge(int age);
virtual void animalShoot();
};
#include "Animal.h"
CAnimal::CAnimal(void)
{
}
CAnimal::~CAnimal(void)
{
}
int CAnimal::getAge()
{
return _age;
}
void CAnimal::setAge(int age)
{
_age = age;
}
void CAnimal::animalShoot()
{
//std::cout<<"animal Shoot"<<endl;
}
#include "Animal.h"
#pragma once
class CHuman :public CAnimal
{
public:
CHuman(void);
public:
~CHuman(void);
public:
virtual void animalShoot();
};
#include "Human.h"
CHuman::CHuman(void)
{
}
CHuman::~CHuman(void)
{
}
void CHuman::animalShoot()
{
std::cout<<"哈哈哈"<<std::endl;
}
#include "Animal.h"
#pragma once
class CCat : public CAnimal
{
public:
CCat(void);
public:
~CCat(void);
public:
virtual void animalShoot();
};
#include "Cat.h"
CCat::CCat(void)
{
}
CCat::~CCat(void)
{
}
void CCat::animalShoot()
{
std::cout<<"喵喵喵"<<std::endl;
}
#include "Animal.h"
#pragma once
class CDog : public CAnimal
{
public:
CDog(void);
public:
~CDog(void);
public:
virtual void animalShoot();
};
#include "Dog.h"
CDog::CDog(void)
{
}
CDog::~CDog(void)
{
}
void CDog::animalShoot()
{
std::cout<<"汪汪汪"<<std::endl;
}
#include <iostream>
using namespace std;
动态绑定:编译器无法再编译的时候识别虚函数的调用,必须在执行的时候才能判断。
纯虚函数:virtual void disPlay() = 0;
抽象类:拥有纯虚函数的类叫做抽象类,抽象类不能定义对象,但是可以定义指向对象的指针。