我不知道如何通过构造函数初始化数组。我知道将数组初始化为所有0值的一种方法是从这里开始 How to initialize all elements in an array to the same number in C++ 但是,我需要遵循您在我的代码中看到的约定。我需要 setArr()和 getArr()以及构造函数。 你能否告诉我,为构造函数和那些函数添加什么,以便 arr [5] 能正常工作,就像 i 一样? 我将非常感谢您的解释,因为我没有在数组的构造函数中找到此类初始化的示例。 谢谢, 问候
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
class A
{
private:
double arr[5];
int i;
public:
//THIS HERE IS WRONG, BUT HOW TO PROGRAMM IT SO THAT I GET NO ERRORS?
A( double arrx = {0}, int ix = 4):, i(ix)
{
std::vector<double> v1(arrx, arrx+5);
std::fill(v1.begin(arr), v1.end(arr), arrx);
}
~A() {}
void setI( int ix ) { i = ix; }
double getI(void) { return i; }
void setArr( double arrx[] )
{
for (int i=0; i < sizeof(arrx); i++)
arr[i] = arrx[i];
}
double* getArr(void) { return arr; }
};
int main()
{
A ob1(6);
//ob1.setI(5);
std::cout << ob1.getI() << std::endl;
}
编辑: 我将更新代码,直到它工作,以便其他人可以在以后受益。 我纠正并得到错误C2661:'std :: vector&lt; _Ty&gt; :: begin':没有重载函数需要1个参数
答案 0 :(得分:2)
首先,在我看来,你的班级设计没有任何意义。 :) 不过我认为你需要至少三个(甚至四个)构造函数:默认构造函数,带初始化列表的构造函数和带有两个参数的构造函数。例如
#include <iostream>
#include <initializer_list>
#include <algorithm>
#include <iterator>
#include <stdexcept>
class A
{
private:
static const size_t MAX_SIZE = 5;
double arr[MAX_SIZE];
size_t i;
public:
A() : arr{}, i( MAX_SIZE ) {}
A( size_t n, double x = 0.0 ) : arr{}, i( n < MAX_SIZE ? n : MAX_SIZE )
{
std::fill( arr, arr + i, x );
}
A( double a[], size_t n )
: arr{}, i( n < MAX_SIZE ? n : MAX_SIZE )
{
std::copy( a, a + i, arr );
}
A( std::initializer_list<double> l )
: arr{}, i( l.size() < MAX_SIZE ? l.size() : MAX_SIZE )
{
std::copy( l.begin(), std::next( l.begin(), i ), arr );
}
void SetValue( double value, size_t n )
{
if ( n < i ) arr[n] = value;
}
double GetValue( size_t n ) const throw( std::out_of_range )
{
if ( i <= n ) throw std::out_of_range( "A::GetValue" );
return ( arr[n] );
}
size_t GetI() const
{
return i;
}
};
int main()
{
A a = { 1.0, 2.0, 3.0, 4.0, 5.0 };
for ( size_t i = 0; i < a.GetI(); i++ ) std::cout << a.GetValue( i ) << ' ';
std::cout << std::endl;
try
{
a.GetValue( 5 );
}
catch( const std::out_of_range &e )
{
std::cout << e.what() << std::endl;
}
return 0;
}
输出
1 2 3 4 5
A::GetValue
编辑:如果您的编译器不支持使用初始化列表进行ctor初始化,那么而不是两个构造函数
A() : arr{}, i( MAX_SIZE ) {}
A( size_t n, double x = 0.0 ) : arr{}, i( n < MAX_SIZE ? n : MAX_SIZE )
{
std::fill( arr, arr + i, x );
}
你可以定义一个构造函数。例如
A( size_t n = MAX_SIZE, double x = 0.0 ) : i( n < MAX_SIZE ? n : MAX_SIZE )
{
std::fill( arr, arr + i, x );
}