在Visual C++中对话框被封装在CDialog类中,该类派生与CWnd,所以对话框与普通窗口有很多相似之处。
1、在资源视图中创建对话框,点击类向导为该类创建新的类CBook。
2、在主对话框中双击确定按钮,可以在主对话框代码中添加调用子对话框的代码。
#include "Book.h"
void CBook::OnOK()
{
// TODO: Add extra validation here
CBook Book;
Book.DoModal ();
//CDialog::OnOK();
}
之后,子对话框和主对话框相关联。
子对话框不能调用父对话框。
在类视图中用New form 创建对话框,该对话框和基础对话框关联方式与上面所述创建的对话框关联方式相同。
类模版的使用
1、类模版的声明和实例化
类模版能够为类的数据成员、成员函数参数、返回值提供动态参数化机制,使得用户可以方便地设计出功能更为灵活的类。
template <class T>
class Calculate
{
public:
Calculate(T a,T b);
T Add();
T subtraction();
private:
T m_a;
T m_b;
};
其中,第一行为模版声明。格式为template <class 类型参数名>。
template的意思是“模版”,是声明模版类时必须的关键字。在template后的“<>”中是参数列表,
关键字class表示后面是类型参数。
尖括号中的参数类型名不是一定要用T,也可是是<class style>等,任意自己喜欢的标示符。
对类模版实例化定义类对象的时候也要注意形式:
类模版名 <实际类型名> 对象名 (实参列表);
例如:
Calculate < int > cal(20,10);
实现类模版时也要使用template关键字。
当定义类中函数时,格式如下。
template<参数类型列表>
返回值 类名<类型参数列表> ::函数名(参数列表)
{函数体内容;}
// classtemplate.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
using namespace std;
template<class T> //声明类模板,有一个参数类型为T
class Compare
{
public:
Compare(T a, T b); //声明构造函数
T Min(); //声明成员函数用来进行比较,选出最小的那个值
T Max(); //声明成员函数用来进行比较,选出最大的那个值
private:
T num1; //成员变量,用来表示进行比较的值
T num2;
};
template<class T> //类模板中的每个成员函数的定义都要加template<class T>
Compare<T>::Compare(T a, T b)
{
num1=a;
num2=b;
}
template<class T>
T Compare<T>::Min() //定义选出最小值的函数
{
if(num1<num2)
return num1;
else
return num2;
}
template<class T>
T Compare<T>::Max() //定义选出最大值的函数
{
if(num1>num2)
return num1;
else
return num2;
}
int main()
{
Compare<int> com1(20,10); //定义一个参数为int类型的对象
cout<<"最小值是 : "<<com1.Min()<<endl;
cout<<"最大值是 : "<<com1.Max()<<endl;
Compare<double> com2(15.2,32.1); //定义一个参数为float类型的对象
cout<<"最小值是 : "<<com2.Min()<<endl;
cout<<"最大值是 : "<<com2.Max()<<endl;
return 0;
}
以上是类模版的实现。
在visual C++MFC编程中,将类模版放在全局定义区或是对话框头文件部分就可以了。