zoukankan      html  css  js  c++  java
  • 模板与类的继承混合使用

    注意以下代码:

      template<class MYT>

      class NEWCLASS: public MYT


      这种用法是我最近才发现的,在WTL中,如果我们用类向导创建的单文档中,有一个CAboutDlg这个类中就用到的了这种方式。

      哪位大神,帮我瞧瞧这种方法的优缺点在哪里?在什么场合下使用比较多?

    #include <iostream>
    using namespace std;
    
    class A
    {
    public:
    	void SetData(int _First = 0, int _Second = 0 )
    	{
    		a = _First;
    		b = _Second;
    	}
    	void Show()
    	{
    		cout<<"A::a: "<<a<<endl;
    		cout<<"A::b: "<<b<<endl;
    	}
    private:
    	int a;
    	int b;
    };
    
    template<class MYT>
    class NEWCLASS: public MYT
    {
    public:
    	void SetNewClassData(int _data = 5)
    	{
    		c = _data;
    	}
    
    	void NewClassShow()
    	{
    		cout<<"NEWCLASS::c: "<<c<<endl;
    	}
    private:
    	int c;
    };
    
    int main()
    {
    	typedef NEWCLASS<A> STDClass;
    	STDClass a;
    
    	a.SetData(5,6);
    	a.SetNewClassData(8);
    	a.Show();
    	a.NewClassShow();
    
    	return 0;
    }
    

     

    另外一个例子,代码是没有任何问题的,我更想知道的是这些大概有什么用处?

    #include <iostream>
    using namespace std;
    
    class A
    {
    public:
    	void SetData(int _First = 0, int _Second = 0 )
    	{
    		a = _First;
    		b = _Second;
    	}
    	void Show()
    	{
    		cout<<"A::a: "<<a<<endl;
    		cout<<"A::b: "<<b<<endl;
    	}
    private:
    	int a;
    	int b;
    };
    
    class B
    {
    public:
    	void BSetData(int _First = 0)
    	{
    		d = _First;
    	}
    	void BShow()
    	{
    		cout<<"B::d: "<<d<<endl;
    	}
    private:
    	int d;
    };
    
    template<class MYT>
    class NEWCLASS: public MYT,public B
    {
    public:
    	void SetNewClassData(int _data = 5)
    	{
    		c = _data;
    	}
    
    	void NewClassShow()
    	{
    		cout<<"NEWCLASS::c: "<<c<<endl;
    	}
    private:
    	int c;
    };
    
    int main()
    {
    	typedef NEWCLASS<A> STDClass;
    	STDClass a;
    
    	a.SetData(5,6);
    	a.SetNewClassData(8);
    	a.BSetData(66);
    	a.Show();
    	a.BShow();
    	a.NewClassShow();
    
    	return 0;
    }
    

      

  • 相关阅读:
    Mongdb 简单增删改查
    mongdb的安装
    VO,DO,DTO,PO,POJO,EJB
    JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 async/await 更好地编码方式!
    判断DataTale中判断某个字段中包含某个数据
    查询表中某个字段的值出现次数大于1的数据
    判断对象数组中是否含有某个对象。
    C# datatable 重新排序
    jquery 验证大于0的整数
    jQuery 心跳请求
  • 原文地址:https://www.cnblogs.com/BreakMind/p/2285508.html
Copyright © 2011-2022 走看看