天天看點

C++進階 模闆與代碼分離

代碼分離

demo.h

class CComplex                                              //定義複數類
{
    double m_fReal, m_fImag;//成員變量
public:
    CComplex(double r = , double i = ) : m_fReal(r), m_fImag(i) {}            //構造函數
    double GetReal() { return m_fReal; }//成員函數,傳回複數的實部
    double GetImag() { return m_fImag; }//成員函數,傳回複數的虛部
    CComplex operator +(CComplex&);                         //重載運算符+
    CComplex operator +(double);                                //重載運算符+
};
           

demo.cpp

#include "test.h"

void main()//主函數
{
    CComplex c1(,),c2(,),c3;//複數類對象
    test().showResult(c1,c2,c3);

}
CComplex CComplex::operator + (CComplex &c)             //重載運算符+,實作兩個複數的加法
{
    CComplex temp;
    temp.m_fReal = m_fReal + c.m_fReal;
    temp.m_fImag = m_fImag + c.m_fImag;
    return temp;
}
CComplex CComplex::operator + (double d)                //重載運算符+,實作複數與實數的加法
{
    CComplex temp;
    temp.m_fReal = m_fReal + d;
    temp.m_fImag = m_fImag;
    return temp;
}

           

test.h

#include"demo.h"
class test
{
public:
    virtual void showResult(CComplex c1, CComplex c2, CComplex c3);
    test();
    ~test();
};


           

test.cpp

#include "test.h"
#include <iostream>
using namespace std;
void test::showResult(CComplex c1, CComplex c2, CComplex c3)
{
    cout << "使用重載的+運算符實作複數與複數的相加" << endl;
    cout << "C1 = " << c1.GetReal() << "+j" << c1.GetImag() << endl;
    cout << "C2 = " << c2.GetReal() << "+j" << c2.GetImag() << endl;
    c3 = c1 + c2;
    cout << "C3 = C1 + C2 =" << c3.GetReal() << "+j" << c3.GetImag() << endl;
    cout << "使用重載的+運算符實作複數與實數的相加" << endl;
    c3 = c3 + ;
    cout << "C3 + 6.5 = " << c3.GetReal() << "+j" << c3.GetImag() << endl;
}
test::test()
{
}

test::~test()
{
}
           

其實一個cpp檔案即可完成上面的代碼,這裡之是以分離出來是為了更好幫助大家了解C++。

1.h中基本都會有一個class對象,盡管可以不寫,但是需要保持這個習慣:h中負責申明對象,和虛函數,然後在引用該h的cpp中實作該虛函數,切記h檔案中不要自己申明自己實作。

2.盡量将class大寫 這樣和java比較像了

模闆
#include <iostream>
#include <string>
using namespace std;
template <class T>                                          //定義函數模闆
T Min(T a, T b,T c)
{
    if(a<b)                                                 
        b=a;
    return b<c?b:c;                                         //傳回b、c中的小值
}
int main()                                                  //主函數
{   
    cout<<"使用模闆函數求不同類型資料的最小值"<<endl<<endl;
    int i1 = , i2 = , i3 = ;
    double d1 = , d2 = , d3 = ;
    string  str1("one"), str2("two"),str3("three");
    cout << " int類型:"<<i1<<", "<<i2<<", "<<i3  <<"    最小值: " << Min(i1, i2, i3) << endl<<endl;                  //int型的最大值
    cout << " double類型:" <<d1<<", "<<d2<<", "<<d3 <<"    最小值:" << Min(d1, d2, d3) << endl<<endl;                //double型的最大值
    cout << " string類型:" <<str1<<", "<<str2<<", "<<str3 <<"    最小值:"<< Min(str1, str2, str3) << endl<<endl;         //string型的最大值
    return ;
}
           

擷取數組長度

#include <iostream>

using namespace std;

template<class T>
int getArrayLen(T &array)  /*使用模闆定義一個函數getArrayLen,該函數将傳回數組array的長度*/ {
    return (sizeof(array) / sizeof(array[]));

}
           

繼續閱讀