<html lang="en"> <head> <title>Constructors and Assignment - Octave C++ Classes</title> <meta http-equiv="Content-Type" content="text/html"> <meta name="description" content="Octave C++ Classes"> <meta name="generator" content="makeinfo 4.13"> <link title="Top" rel="start" href="index.html#Top"> <link rel="up" href="Arrays.html#Arrays" title="Arrays"> <link rel="prev" href="Arrays.html#Arrays" title="Arrays"> <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> <meta http-equiv="Content-Style-Type" content="text/css"> <style type="text/css"><!-- pre.display { font-family:inherit } pre.format { font-family:inherit } pre.smalldisplay { font-family:inherit; font-size:smaller } pre.smallformat { font-family:inherit; font-size:smaller } pre.smallexample { font-size:smaller } pre.smalllisp { font-size:smaller } span.sc { font-variant:small-caps } span.roman { font-family:serif; font-weight:normal; } span.sansserif { font-family:sans-serif; font-weight:normal; } --></style> </head> <body> <div class="node"> <a name="Constructors-and-Assignment"></a> <p> Previous: <a rel="previous" accesskey="p" href="Arrays.html#Arrays">Arrays</a>, Up: <a rel="up" accesskey="u" href="Arrays.html#Arrays">Arrays</a> <hr> </div> <h3 class="section">3.1 Constructors and Assignment</h3> <div class="defun"> — Constructor: <b>Array<T></b> (<var>void</var>)<var><a name="index-Array_003cT_003e-7"></a></var><br> <blockquote><p>Create an array with no elements. </p></blockquote></div> <div class="defun"> — Constructor: <b>Array<T></b> (<var>int n </var>[<var>, const T &val</var>])<var><a name="index-Array_003cT_003e-8"></a></var><br> <blockquote><p>Create an array with <var>n</var> elements. If the optional argument <var>val</var> is supplied, the elements are initialized to <var>val</var>; otherwise, they are left uninitialized. If <var>n</var> is less than zero, the current error handler is invoked (see <a href="Error-Handling.html#Error-Handling">Error Handling</a>). </p></blockquote></div> <div class="defun"> — Constructor: <b>Array<T></b> (<var>const Array<T> &a</var>)<var><a name="index-Array_003cT_003e-9"></a></var><br> <blockquote><p>Create a copy of the <var>Array<T></var> object <var>a</var>. Memory for the <var>Array<T></var> class is managed using a reference counting scheme, so the cost of this operation is independent of the size of the array. </p></blockquote></div> <div class="defun"> — Assignment on Array<T>: Array<T>& <b>operator =</b> (<var>const Array<T> &a</var>)<var><a name="index-operator-_003d-on-Array_003cT_003e-10"></a></var><br> <blockquote><p>Assignment operator. Memory for the <var>Array<T></var> class is managed using a reference counting scheme, so the cost of this operation is independent of the size of the array. </p></blockquote></div> <div class="defun"> — Method on Array<T>: int <b>capacity</b> (<var>void</var>)<var> const<a name="index-capacity-on-Array_003cT_003e-11"></a></var><br> — Method on Array<T>: int <b>length</b> (<var>void</var>)<var> const<a name="index-length-on-Array_003cT_003e-12"></a></var><br> <blockquote><p>Return the length of the array. </p></blockquote></div> <div class="defun"> — Method on Array<T>: T& <b>elem</b> (<var>int n</var>)<var><a name="index-elem-on-Array_003cT_003e-13"></a></var><br> — Method on Array<T>: T& <b>checkelem</b> (<var>int n</var>)<var><a name="index-checkelem-on-Array_003cT_003e-14"></a></var><br> <blockquote><p>If <var>n</var> is within the bounds of the array, return a reference to the element indexed by <var>n</var>; otherwise, the current error handler is invoked (see <a href="Error-Handling.html#Error-Handling">Error Handling</a>). </p></blockquote></div> <div class="defun"> — Indexing on Array<T>: T& <b>operator ()</b> (<var>int n</var>)<var><a name="index-operator-_0028_0029-on-Array_003cT_003e-15"></a></var><br> </div> <div class="defun"> — Method on Array<T>: T <b>elem</b> (<var>int n</var>)<var> const<a name="index-elem-on-Array_003cT_003e-16"></a></var><br> — Method on Array<T>: T <b>checkelem</b> (<var>int n</var>)<var> const<a name="index-checkelem-on-Array_003cT_003e-17"></a></var><br> <blockquote><p>If <var>n</var> is within the bounds of the array, return the value indexed by <var>n</var>; otherwise, call the current error handler. See <a href="Error-Handling.html#Error-Handling">Error Handling</a>. </p></blockquote></div> <div class="defun"> — Indexing on Array<T>: T <b>operator ()</b> (<var>int n</var>)<var> const<a name="index-operator-_0028_0029-on-Array_003cT_003e-18"></a></var><br> </div> <div class="defun"> — Method on Array<T>: T& <b>xelem</b> (<var>int n</var>)<var><a name="index-xelem-on-Array_003cT_003e-19"></a></var><br> — Method on Array<T>: T <b>xelem</b> (<var>int n</var>)<var> const<a name="index-xelem-on-Array_003cT_003e-20"></a></var><br> <blockquote><p>Return a reference to, or the value of, the element indexed by <var>n</var>. These methods never perform bounds checking. </p></blockquote></div> <div class="defun"> — Method on Array<T>: void <b>resize</b> (<var><a name="index-resize-on-Array_003cT_003e-21"></a></var><br> <blockquote><p>Change the size of the array to be <var>n</var> elements. All elements are unchanged, except that if <var>n</var> is greater than the current size and the optional argument <var>val</var> is provided, the additional elements are initialized to <var>val</var>; otherwise, any additional elements are left uninitialized. In the current implementation, if <var>n</var> is less than the current size, the length is updated but no memory is released. </p></blockquote></div> <div class="defun"> — Method on Array<T>: const T* <b>data</b> (<var>void</var>)<var> const<a name="index-data-on-Array_003cT_003e-22"></a></var><br> </div> <!-- Should this be public? --> <!-- T *fortran_vec (void) --> <div class="defun"> — Constructor: <b>Array2<T></b><var> Array2<T> Array2 </var>(<var>void</var>)<var><a name="index-Array2_003cT_003e-23"></a></var><br> — Constructor: <b>Array2<T></b> (<var>int n, int m</var>)<var><a name="index-Array2_003cT_003e-24"></a></var><br> — Constructor: <b>Array2<T></b> (<var>int n, int m, const T &val</var>)<var><a name="index-Array2_003cT_003e-25"></a></var><br> — Constructor: <b>Array2<T></b> (<var>const Array2<T> &a</var>)<var><a name="index-Array2_003cT_003e-26"></a></var><br> — Constructor: <b>Array2<T></b> (<var>const DiagArray<T> &a</var>)<var><a name="index-Array2_003cT_003e-27"></a></var><br> </div> <div class="defun"> — Assignment on Array2<T>: Array2<T>& <b>operator =</b> (<var>const Array2<T> &a</var>)<var><a name="index-operator-_003d-on-Array2_003cT_003e-28"></a></var><br> </div> <div class="defun"> — Method on Array2<T>: int <b>dim1</b> (<var>void</var>)<var> const<a name="index-dim1-on-Array2_003cT_003e-29"></a></var><br> — Method on Array2<T>: int <b>rows</b> (<var>void</var>)<var> const<a name="index-rows-on-Array2_003cT_003e-30"></a></var><br> </div> <div class="defun"> — Method on Array2<T>: int <b>dim2</b> (<var>void</var>)<var> const<a name="index-dim2-on-Array2_003cT_003e-31"></a></var><br> — Method on Array2<T>: int <b>cols</b> (<var>void</var>)<var> const<a name="index-cols-on-Array2_003cT_003e-32"></a></var><br> — Method on Array2<T>: int <b>columns</b> (<var>void</var>)<var> const<a name="index-columns-on-Array2_003cT_003e-33"></a></var><br> </div> <div class="defun"> — Method on Array2<T>: T& <b>elem</b> (<var>int i, int j</var>)<var><a name="index-elem-on-Array2_003cT_003e-34"></a></var><br> — Method on Array2<T>: T& <b>checkelem</b> (<var>int i, int j</var>)<var><a name="index-checkelem-on-Array2_003cT_003e-35"></a></var><br> </div> <div class="defun"> — Indexing on Array2<T>: T& <b>operator ()</b> (<var>int i, int j</var>)<var><a name="index-operator-_0028_0029-on-Array2_003cT_003e-36"></a></var><br> </div> <!-- This needs to be fixed. --> <!-- T& xelem (int i, int j) --> <!-- T elem (int i, int j) const --> <!-- T checkelem (int i, int j) const --> <!-- T operator () (int i, int j) const --> <div class="defun"> — Method on Array2<T>: void <b>resize</b> (<var>int n, int m</var>)<var><a name="index-resize-on-Array2_003cT_003e-37"></a></var><br> — Method on Array2<T>: void <b>resize</b> (<var>int n, int m, const T &val</var>)<var><a name="index-resize-on-Array2_003cT_003e-38"></a></var><br> </div> <div class="defun"> — Constructor: <b>Array3<T></b> (<var>void</var>)<var><a name="index-Array3_003cT_003e-39"></a></var><br> — Constructor: <b>Array3<T></b> (<var>int n, int m, int k</var>)<var><a name="index-Array3_003cT_003e-40"></a></var><br> — Constructor: <b>Array3<T></b> (<var>int n, int m, int k, const T &val</var>)<var><a name="index-Array3_003cT_003e-41"></a></var><br> — Constructor: <b>Array3<T></b> (<var>const Array3<T> &a</var>)<var><a name="index-Array3_003cT_003e-42"></a></var><br> </div> <div class="defun"> — Assignment on Array3<T>: Array3<T>& <b>operator =</b> (<var>const Array3<T> &a</var>)<var><a name="index-operator-_003d-on-Array3_003cT_003e-43"></a></var><br> </div> <div class="defun"> — Method on Array3<T>: int <b>dim1</b> (<var>void</var>)<var> const<a name="index-dim1-on-Array3_003cT_003e-44"></a></var><br> — Method on Array3<T>: int <b>dim2</b> (<var>void</var>)<var> const<a name="index-dim2-on-Array3_003cT_003e-45"></a></var><br> — Method on Array3<T>: int <b>dim3</b> (<var>void</var>)<var> const<a name="index-dim3-on-Array3_003cT_003e-46"></a></var><br> </div> <div class="defun"> — Method on Array3<T>: T& <b>elem</b> (<var>int i, int j, int k</var>)<var><a name="index-elem-on-Array3_003cT_003e-47"></a></var><br> — Method on Array3<T>: T& <b>checkelem</b> (<var>int i, int j, int k</var>)<var><a name="index-checkelem-on-Array3_003cT_003e-48"></a></var><br> </div> <div class="defun"> — Indexing on Array3<T>: T& <b>operator ()</b> (<var>int i, int j, int k</var>)<var><a name="index-operator-_0028_0029-on-Array3_003cT_003e-49"></a></var><br> </div> <!-- This needs to be fixed. --> <!-- T& xelem (int i, int j, int k) --> <!-- T elem (int i, int j, int k) const --> <!-- T checkelem (int i, int j, int k) const --> <!-- T operator () (int i, int j, int k) const --> <div class="defun"> — Method on Array3<T>: void <b>resize</b> (<var>int n, int m, int k</var>)<var><a name="index-resize-on-Array3_003cT_003e-50"></a></var><br> — Method on Array3<T>: void <b>resize</b> (<var>int n, int m, int k, const T &val</var>)<var><a name="index-resize-on-Array3_003cT_003e-51"></a></var><br> </div> <div class="defun"> — Constructor: <b>DiagArray<T></b> (<var>void</var>)<var><a name="index-DiagArray_003cT_003e-52"></a></var><br> — Constructor: <b>DiagArray<T></b> (<var>int n</var>)<var><a name="index-DiagArray_003cT_003e-53"></a></var><br> — Constructor: <b>DiagArray<T></b> (<var>int n, const T &val</var>)<var><a name="index-DiagArray_003cT_003e-54"></a></var><br> — Constructor: <b>DiagArray<T></b> (<var>int r, int c</var>)<var><a name="index-DiagArray_003cT_003e-55"></a></var><br> — Constructor: <b>DiagArray<T></b> (<var>int r, int c, const T &val</var>)<var><a name="index-DiagArray_003cT_003e-56"></a></var><br> — Constructor: <b>DiagArray<T></b> (<var>const Array<T> &a</var>)<var><a name="index-DiagArray_003cT_003e-57"></a></var><br> — Constructor: <b>DiagArray<T></b> (<var>const DiagArray<T> &a</var>)<var><a name="index-DiagArray_003cT_003e-58"></a></var><br> </div> <div class="defun"> — Assginment on DiagArray<T>&: <b>operator =</b> (<var>const DiagArray<T> &a</var>)<var><a name="index-operator-_003d-on-DiagArray_003cT_003e_0026-59"></a></var><br> </div> <div class="defun"> — Method on DiagArray<T>: int <b>dim1</b> (<var>void</var>)<var> const<a name="index-dim1-on-DiagArray_003cT_003e-60"></a></var><br> — Method on DiagArray<T>: int <b>rows</b> (<var>void</var>)<var> const<a name="index-rows-on-DiagArray_003cT_003e-61"></a></var><br> </div> <div class="defun"> — Method on DiagArray<T>: int <b>dim2</b> (<var>void</var>)<var> const<a name="index-dim2-on-DiagArray_003cT_003e-62"></a></var><br> — Method on DiagArray<T>: int <b>cols</b> (<var>void</var>)<var> const<a name="index-cols-on-DiagArray_003cT_003e-63"></a></var><br> — Method on DiagArray<T>: int <b>columns</b> (<var>void</var>)<var> const<a name="index-columns-on-DiagArray_003cT_003e-64"></a></var><br> </div> <div class="defun"> — Method on DiagArray<T>: T& <b>elem</b> (<var>int r, int c</var>)<var><a name="index-elem-on-DiagArray_003cT_003e-65"></a></var><br> — Method on DiagArray<T>: T& <b>checkelem</b> (<var>int r, int c</var>)<var><a name="index-checkelem-on-DiagArray_003cT_003e-66"></a></var><br> </div> <div class="defun"> — Indexing on DiagArray<T>: T& <b>operator ()</b> (<var>int r, int c</var>)<var><a name="index-operator-_0028_0029-on-DiagArray_003cT_003e-67"></a></var><br> </div> <!-- This needs to be fixed. --> <!-- T& xelem (int r, int c) --> <!-- T elem (int r, int c) const --> <!-- T checkelem (int r, int c) const --> <!-- T operator () (int r, int c) const --> <div class="defun"> — Method on DiagArray<T>: void <b>resize</b> (<var>int n, int m</var>)<var><a name="index-resize-on-DiagArray_003cT_003e-68"></a></var><br> — Method on DiagArray<T>: void <b>resize</b> (<var>int n, int m, const T &val</var>)<var><a name="index-resize-on-DiagArray_003cT_003e-69"></a></var><br> </div> <!-- Copyright (C) 1996, 1998, 2006, 2007 John W. Eaton --> <!-- This file is part of Octave. --> <!-- Octave is free software; you can redistribute it and/or modify it --> <!-- under the terms of the GNU General Public License as published by the --> <!-- Free Software Foundation; either version 3 of the License, or (at --> <!-- your option) any later version. --> <!-- Octave is distributed in the hope that it will be useful, but WITHOUT --> <!-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or --> <!-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --> <!-- for more details. --> <!-- You should have received a copy of the GNU General Public License --> <!-- along with Octave; see the file COPYING. If not, see --> <!-- <http://www.gnu.org/licenses/>. --> <p>The real and complex <code>ColumnVector</code> and <code>RowVector</code> classes all have the following functions. These will eventually be part of an <code>MArray<T></code> class, derived from the <code>Array<T></code> class. Then the <code>ColumnVector</code> and <code>RowVector</code> classes will be derived from the <code>MArray<T></code> class. <p>Element by element vector by scalar ops. <div class="defun"> — : RowVector <b>operator +</b> (<var>const RowVector &a, const double &s</var>)<var><a name="index-operator-_002b-70"></a></var><br> — : RowVector <b>operator -</b> (<var>const RowVector &a, const double &s</var>)<var><a name="index-operator-_002d-71"></a></var><br> — : RowVector <b>operator *</b> (<var>const RowVector &a, const double &s</var>)<var><a name="index-operator-_002a-72"></a></var><br> — : RowVector <b>operator /</b> (<var>const RowVector &a, const double &s</var>)<var><a name="index-operator-_002f-73"></a></var><br> </div> <p>Element by element scalar by vector ops. <div class="defun"> — : RowVector <b>operator +</b> (<var>const double &s, const RowVector &a</var>)<var><a name="index-operator-_002b-74"></a></var><br> — : RowVector <b>operator -</b> (<var>const double &s, const RowVector &a</var>)<var><a name="index-operator-_002d-75"></a></var><br> — : RowVector <b>operator *</b> (<var>const double &s, const RowVector &a</var>)<var><a name="index-operator-_002a-76"></a></var><br> — : RowVector <b>operator /</b> (<var>const double &s, const RowVector &a</var>)<var><a name="index-operator-_002f-77"></a></var><br> </div> <p>Element by element vector by vector ops. <div class="defun"> — : RowVector <b>operator +</b> (<var>const RowVector &a, const RowVector &b</var>)<var><a name="index-operator-_002b-78"></a></var><br> — : RowVector <b>operator -</b> (<var>const RowVector &a, const RowVector &b</var>)<var><a name="index-operator-_002d-79"></a></var><br> </div> <div class="defun"> — : RowVector <b>product</b> (<var>const RowVector &a, const RowVector &b</var>)<var><a name="index-product-80"></a></var><br> — : RowVector <b>quotient</b> (<var>const RowVector &a, const RowVector &b</var>)<var><a name="index-quotient-81"></a></var><br> </div> <p>Unary MArray ops. <div class="defun"> — : RowVector <b>operator -</b> (<var>const RowVector &a</var>)<var><a name="index-operator-_002d-82"></a></var><br> </div> <!-- --> <p>The <code>Matrix</code> classes share the following functions. These will eventually be part of an <code>MArray2<T></code> class, derived from the <code>Array2<T></code> class. Then the <code>Matrix</code> class will be derived from the <code>MArray<T></code> class. <p>Element by element matrix by scalar ops. <div class="defun"> — : Matrix <b>operator +</b> (<var>const Matrix &a, const double &s</var>)<var><a name="index-operator-_002b-83"></a></var><br> — : Matrix <b>operator -</b> (<var>const Matrix &a, const double &s</var>)<var><a name="index-operator-_002d-84"></a></var><br> — : Matrix <b>operator *</b> (<var>const Matrix &a, const double &s</var>)<var><a name="index-operator-_002a-85"></a></var><br> — : Matrix <b>operator /</b> (<var>const Matrix &a, const double &s</var>)<var><a name="index-operator-_002f-86"></a></var><br> </div> <p>Element by element scalar by matrix ops. <div class="defun"> — : Matrix <b>operator +</b> (<var>const double &s, const Matrix &a</var>)<var><a name="index-operator-_002b-87"></a></var><br> — : Matrix <b>operator -</b> (<var>const double &s, const Matrix &a</var>)<var><a name="index-operator-_002d-88"></a></var><br> — : Matrix <b>operator *</b> (<var>const double &s, const Matrix &a</var>)<var><a name="index-operator-_002a-89"></a></var><br> — : Matrix <b>operator /</b> (<var>const double &s, const Matrix &a</var>)<var><a name="index-operator-_002f-90"></a></var><br> </div> <p>Element by element matrix by matrix ops. <div class="defun"> — : Matrix <b>operator +</b> (<var>const Matrix &a, const Matrix &b</var>)<var><a name="index-operator-_002b-91"></a></var><br> — : Matrix <b>operator -</b> (<var>const Matrix &a, const Matrix &b</var>)<var><a name="index-operator-_002d-92"></a></var><br> </div> <div class="defun"> — : Matrix <b>product</b> (<var>const Matrix &a, const Matrix &b</var>)<var><a name="index-product-93"></a></var><br> — : Matrix <b>quotient</b> (<var>const Matrix &a, const Matrix &b</var>)<var><a name="index-quotient-94"></a></var><br> </div> <p>Unary matrix ops. <div class="defun"> — : Matrix <b>operator -</b> (<var>const Matrix &a</var>)<var><a name="index-operator-_002d-95"></a></var><br> </div> <!-- --> <p>The <code>DiagMatrix</code> classes share the following functions. These will eventually be part of an <code>MDiagArray<T></code> class, derived from the <code>DiagArray<T></code> class. Then the <code>DiagMatrix</code> class will be derived from the <code>MDiagArray<T></code> class. <p>Element by element MDiagArray by scalar ops. <div class="defun"> — : DiagMatrix <b>operator *</b> (<var>const DiagMatrix &a, const double &s</var>)<var><a name="index-operator-_002a-96"></a></var><br> — : DiagMatrix <b>operator /</b> (<var>const DiagMatrix &a, const double &s</var>)<var><a name="index-operator-_002f-97"></a></var><br> </div> <p>Element by element scalar by MDiagArray ops. <div class="defun"> — : DiagMatrix <b>operator *</b> (<var>const double &s, const DiagMatrix &a</var>)<var><a name="index-operator-_002a-98"></a></var><br> </div> <p>Element by element MDiagArray by MDiagArray ops. <div class="defun"> — : DiagMatrix <b>operator +</b> (<var>const DiagMatrix &a, const DiagMatrix &b</var>)<var><a name="index-operator-_002b-99"></a></var><br> — : DiagMatrix <b>operator -</b> (<var>const DiagMatrix &a, const DiagMatrix &b</var>)<var><a name="index-operator-_002d-100"></a></var><br> </div> <div class="defun"> — : DiagMatrix <b>product</b> (<var>const DiagMatrix &a, const DiagMatrix &b</var>)<var><a name="index-product-101"></a></var><br> </div> <p>Unary MDiagArray ops. <div class="defun"> — : DiagMatrix <b>operator -</b> (<var>const DiagMatrix &a</var>)<var><a name="index-operator-_002d-102"></a></var><br> </div> <!-- --> </body></html>