Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/uC++toCFA/uC++toCFA.tex

    r538cc35 r946a6e4  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Thu Jan 11 14:46:14 2024
    14 %% Update Count     : 5942
     13%% Last Modified On : Sun Oct 15 23:09:58 2023
     14%% Update Count     : 5926
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    428428\begin{uC++}
    429429struct S {
    430         int i = 0;  // cheat, implicit default constructor
     430        int i = 0;
    431431        int setter( int j ) { int t = i; i = j; return t; }
    432432        int getter() { return i; }
     
    434434
    435435S s;
    436 @s.@setter( 3 );  // object-oriented calls
     436@s.@setter( 3 );  // object-oriented call
    437437int k = @s.@getter();
    438438\end{uC++}
     
    442442        int i;
    443443};
    444 void ?{}( S & s ) { s.i = 0; } // explicit default constructor
     444void ?{}( S & s ) { s.i = 0; }
    445445int setter( @S & s,@ int j ) @with(s)@ { int t = i; i = j; return t; }
    446446int getter( @S & s@ ) @with(s)@ { return i; }
    447447S s;
    448 setter( @s,@ 3 );  // normal routine calls
     448setter( @s,@ 3 );  // normal routine call
    449449int k = getter( @s@ );
    450450\end{cfa}
     
    458458\begin{tabular}{l|l}
    459459\begin{uC++}
    460 
    461460struct S {
    462461        int i;
    463         S( int i ) { S::i = i; cout << "ctor " << S::i << endl; }
    464         ~S() { S::i = i; cout << "dtor " << S::i << endl; }
    465 };
     462        S( int i ) { S::i = i; cout << S::i << endl; }
     463};
     464@uNoCtor<S>@ s[10];
    466465int main() {
    467         enum { N = 5 };
    468         @uNoCtor<S>@ s[N];   // no constructor calls
    469         for ( int i = 0; i < N; i += 1 ) @s[i].ctor( i )@;
    470         for ( int i = 0; i < N; i += 1 ) cout << s[i]@->@i << endl;
    471 }
    472 \end{uC++}
    473 &
    474 \begin{cfa}
    475 #include @<raii.hfa>@          // uninit
     466        for ( int i = 0; i < 10; i += 1 ) {
     467                s[i].ctor( i );
     468        }
     469        for ( int i = 0; i < 10; i += 1 ) {
     470                cout << s[i]@->@i << endl;
     471        }
     472}
     473\end{uC++}
     474&
     475\begin{cfa}
    476476struct S {
    477477        int i;
    478478};
    479 void ?{}( S & s, int i ) { s.i = i; sout | "ctor" | s.i; }
    480 void ^?{}( S & s ) { sout | "dtor" | s.i; }
     479void ?{}( S & s, int i ) { s.i = i; sout | s.i; }
     480S s[10] @$\color{red}@$= {}@;
    481481int main() {
    482         enum { N = 5 };
    483         @uninit(S)@ s[N];   // no constructor calls
    484         for ( i; N ) @s[i]{ i }@;
    485         for ( i; N ) sout | s[i]@.@i;
     482        for ( i; 10 ) {
     483                ?{}( s[i], i );  // call constructor
     484        }
     485        for ( i; 10 ) {
     486                sout | s[i]@.@i; // dot not arrow
     487        }
    486488}
    487489\end{cfa}
Note: See TracChangeset for help on using the changeset viewer.