C ++模板帮助,使用模板进行集成

时间:2011-09-27 18:02:52

标签: c++ templates

您好我正在关注我在网上找到的教程和视频,我试图制作一个模板来预先形成一个函数的数值集成,用户可以决定执行哪种形式的集成,我试图将它保存到一个文件由于不使用标题而不使用大量的循环,第一次集成的代码本身工作正常,但是当我通过模板运行时,我得到错误的答案和相同的值1.9147e-307为每个输入什么是我做错了吗?

#include <iostream>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include<conio.h>

using namespace std;

//declared function
double F(double X)
{
   double f;

   f = (X*X);
   return f;
};

double unifRand()
{
    return rand() / double(RAND_MAX);
};

template<typename T> class INTG{
    private:
        T a;
        T b;
        T n;
    public:
        INTG(T a, T b,T n){
            INTG::a = a;
            INTG::b = b;
        }

        ~INTG(){}

        T MC() {
            // some code

            return ans;}

        T SIMPC(){ // Simpson integration code here
            return a+b+n;
        }
};

int main() {
    double a,b,mc,simp,ans;
    int OP,n;
    cout<<"Enter 1 for Monte Carlo Integration , Enter 2 for Composite Simpson Integration, enter 3 for trapezoidal int...."<<endl;
    cin>>OP;
    clock_t start = clock();


    if (OP == 1) {
        cout<<"Enter lower limit of integration"<<endl;
        cin>>a;
        cout<<"Enter upper limit of integration"<<endl;
        cin>>b;
        cout<<"Enter number of iterations"<<endl;
        cin>>n;
        ans = INTG<double>::MC(a, b, n);
        INTG<double> MyCalc(a,b,n);

        cout<< ans <<endl;

        //mc =  INTG::MC(a, b, n);
        getch();
    }
}

2 个答案:

答案 0 :(得分:5)

永远不会为

ans分配值。这将占你的1.9147e-307。

你打算

吗?
ans = MyCalc.MC();

cout之前?

另外

INTG(T a, T b,T n){
    INTG::a = a;
    INTG::b = b;
}

更好地描述为

INTG(T a, T b, T n):a(a),b(b),n(n) {}

初始化而不是分配和记住n。

所以计算顺序是

INTG<double> MyCalc(a,b,n);
ans = MyCalc.MC();

答案 1 :(得分:2)

if (OP = 1) {

......应该......

if (OP == 1) {