如何使用成员的参数化构造函数初始化成员
How to initialize a member using its parameterized constructor
没有代码很难描述,因此如下所示:我试图在另一个(a(的头文件中创建一个对象(b(的原型,然后在(a(调用(b(构造函数的构造函数中传递值,这样我就可以使用b的方法,这些方法取决于它的构造函数和传递给它的值,但我的做法是:pricing构造函数的左括号中用红色下划线表示:"蒙特卡洛不存在默认构造函数",然后在下一行m用红色下划线强调:"调用没有适当运算符((或转换函数的类类型的对象以指向函数类型"。任何其他对我的节目的批评都是非常受欢迎的,我正在努力学习节目,而且很好。
在文件pricing.cpp中我有:
#include "pricing.h"
#include <math.h>
#include <vector>
pricing::pricing(void)
{
m(10,0.0,0.01,50);
}
double pricing::expectedValue(void)
{
expectedExValue = m.samplePaths[2][3]; //yes this isn't an expected value,
// its just for illustration purposes/making it compile.
return 0;
}
在定价方面。h我有:
#pragma once
#include "pricing.h"
#include "monteCarlo.h"
class pricing
{
public:
pricing(void);
~pricing(void);
double euroCall();
std::vector<double> samplePathing;
double expectedValue();
monteCarlo m;
};
然后montecarlo.cpp看起来像:
#include "monteCarlo.h"
#include "randomWalk.h"
#include <vector>
#include <iostream>
monteCarlo::monteCarlo(int trails, double drift, double volidatity, int density)
{
for (int i = 0; i < trails; i++)
{
std::cout << "Trail number " << i+1 << std::endl;
randomWalk r(drift,volidatity,density);
r.seed();
samplePaths.emplace_back(r.samplePath);
std::cout << std::endl << std::endl;
}
}
monteCarlo::~monteCarlo(void)
{
}
最后是蒙特卡罗。h是:
#pragma once
#include <vector>
class monteCarlo
{
public:
monteCarlo(int, double, double, int);
~monteCarlo(void);
std::vector< std::vector<double> > samplePaths;
};
pricing::pricing(void)
{
m(10,0.0,0.01,50);
}
这将尝试调用m
,就好像它是一个函数一样(如果它重载了operator()
,则可以执行此操作,这就是错误所说的(。要初始化m
,请使用成员初始化列表:
pricing::pricing(void)
: m(10,0.0,0.01,50)
{ }
此冒号语法用于初始化构造函数中对象的成员。您只需按成员的名称列出成员,然后使用( expression-list )
或{ initializer-list }
语法对其进行初始化。
pricing.cpp
#include "pricing.h"
pricing::pricing()
: m(10,0.0,0.01,50)
{
}
double pricing::expectedValue()
{
return m.samplePaths[2][3];
}
定价.h
#ifndef PRICING_H
#define PRICING_H
#include "monteCarlo.h"
#include <vector>
class pricing
{
public:
pricing();
double euroCall();
std::vector<double> samplePathing;
double expectedValue();
private:
monteCarlo m;
};
#endif
montecarlo.cpp看起来像:
#include "monteCarlo.h"
#include "randomWalk.h"
#include <iostream>
monteCarlo::monteCarlo(int trails, double drift, double volidatity, int density)
{
for (int i = 0; i < trails; i++)
{
std::cout << "Trail number " << i+1 << std::endl;
randomWalk r(drift,volidatity,density);
r.seed();
samplePaths.emplace_back(r.samplePath);
std::cout << "n" << std::endl;
}
}
最后是蒙特卡罗。h是:
#ifndef MONTECARLO_H
#define MONTECARLO_H
#include <vector>
class monteCarlo
{
public:
monteCarlo(int, double, double, int);
std::vector< std::vector<double> > samplePaths;
};
#endif
我会使用一些非常基本的规则:
- 使用包括防护
- 仅包括标头中真正需要的标头
- 将标头作为实现中的第一个文件包括在内
- 不要在标头中使用"using namespace">
- 如果可能,请使用前向声明而不是include
3( 确保标头包含所有必要的包含文件
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 继承:构造函数,初始化C++11中基类的类C数组成员
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 如果基类包含双指针成员,则派生类的构造函数
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- constexpr构造函数需要常量成员函数时出现问题
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 在成员构造函数之后调用基类构造函数
- C++:如何在对象构造过程中调用初始值设定项列表之外的成员构造函数
- 用作成员构造函数参数的函数的求值顺序
- 从成员构造函数(Brace Initializer vs Initializer列表)抛出异常
- 不正确的成员构造函数定义
- 我可以基于模板参数将某个值传递给成员构造函数吗
- 在类定义中调用成员构造函数
- 使用已删除的副本构造函数和初始值设定项列表重载调用类定义中的成员构造函数
- 正在从成员构造函数调用虚拟函数
- c++初始化类成员构造函数
- c++模板限制成员构造函数