Difference between revisions of "C++ Syntax"

From TRCCompSci - AQA Computer Science
Jump to: navigation, search
(Operators)
(Classes - Closure Based)
Line 286: Line 286:
 
function Square:printArea ()
 
function Square:printArea ()
 
   print("The area of square is ",self.area)
 
   print("The area of square is ",self.area)
end
 
</syntaxhighlight>
 
 
=Classes - Closure Based=
 
Lua can implement classes in a second way:
 
===Define a Class===
 
<syntaxhighlight lang=lua>
 
function MyClass(init)
 
  -- the new instance
 
  local self = {
 
    -- public fields go in the instance table
 
    public_field = 0
 
  }
 
 
  -- private fields are implemented using locals
 
  -- they are faster than table access, and are truly private, so the code that uses your class can't get them
 
  local private_field = init
 
 
  function self.foo()
 
    return self.public_field + private_field
 
  end
 
 
  function self.bar()
 
    private_field = private_field + 1
 
  end
 
 
  -- return the instance
 
  return self
 
end
 
</syntaxhighlight>
 
 
===Creating an Object===
 
Creating and using an instance can be done with:
 
 
<syntaxhighlight lang=lua>
 
local i = MyClass(5)
 
print(i.foo()) --> 5
 
i.public_field = 3
 
i.bar()
 
</syntaxhighlight>
 
 
===Inheritance===
 
This is the base class, and below a subclass derived from it:
 
 
<syntaxhighlight lang=lua>
 
function BaseClass(init)
 
  local self = {}
 
 
  local private_field = init
 
 
  function self.foo()
 
    return private_field
 
  end
 
 
  function self.bar()
 
    private_field = private_field + 1
 
  end
 
 
  -- return the instance
 
  return self
 
end
 
 
function DerivedClass(init, init2)
 
  local self = BaseClass(init)
 
 
  -- Public fields can be added to the derived version
 
  self.public_field = init2
 
 
  -- this is independent from the base class's private field that has the same name
 
  -- the derived value would be self.private_field
 
  local private_field = init2
 
 
  -- save the base version of foo for use in the derived version
 
  local base_foo = self.foo
 
 
  -- this function overrides the derived version
 
  function self.foo()
 
    return private_field + self.public_field + base_foo()
 
  end
 
 
  -- return the instance
 
  return self
 
 
end
 
end
 
</syntaxhighlight>
 
</syntaxhighlight>

Revision as of 11:27, 13 June 2019

Comments

C++ implements comments by:

/* This is a comment */

/* C++ comments can also
   * span multiple lines
*/

// Single line comment also

Write to Console

Writing to the console is a little more complicated than other languages:

#include <iostream>
using namespace std;

main() {
   cout << "Hello World"; // prints Hello World
   
   return 0;
}

You can also use 'endl' to have a new line:

#include <iostream>
using namespace std;

int main() {
   cout << "Hello World" << endl;
   cout << "Hola Mundo"  << endl;
   
   return 0;
}

You can also concatenate using the '<<' symbols:

#include <iostream>
using namespace std;

main() {
   cout << "Hello World " << 0 <<endl; // prints Hello World followed by a 0
   
   return 0;
}

This method can be used to concatenate variable into your output (ie replace '0' with a variable name).

Escape Characters

These can also include escape characters in the string, eg '\n':

#include <iostream>
using namespace std;

main() {
   cout << "Hello\nWorld"; // prints Hello followed by a new line and then World
   
   return 0;
}

Here is a list of the escape characters available:

Escape sequence Meaning
\\ \ character
\' ' character
\" Alert or bell
\b Backspace
\f Form feed
\n Newline
\r Carriage return
\t Horizontal tab
\v Vertical tab
\ooo Octal number of one to three digits
\xhh . . . Hexadecimal number of one or more digits

Read from Console

C++ can read from the keyboard (ie Console.ReadLine() in C# or input() in Python), This uses the 'cin' command. The example is for will read an integer (notice the direction of the '>>' is swapped for inputs):

#include <iostream>
using namespace std;

int main ()
{
  int i;
  cout << "Please enter an integer value: ";
  cin >> i;
  cout << "The value you entered is " << i;
  return 0;
}

Strings are handled differently, because using 'cin' a space is considered to be terminating character. using this method you can only enter a single word. So you need to do this instead:

#include <iostream>
#include <string> //added this include for handling strings
using namespace std;

int main ()
{
  string mystr;
  cout << "What's your name? ";
  getline (cin, mystr); //getline is passed cin and the string to read in
  cout << "Hello " << mystr << endl;

  return 0;
}

Variables

Lua uses variables similar to python, you don't need to specify a data type:

Numbers

num = 42  -- All numbers are doubles.

Strings

s = 'walternate'  -- Immutable strings like Python.
t = "double-quotes are also fine"
u = [[ Double brackets
       start and end
       multi-line strings.]]
-- String concatenation uses the .. operator:
message = 'Winter is coming, ' .. line

Empty / Null

t = nil  -- Undefines t; Lua has garbage collection.

Global Variables

The default in Lua is that all variables are global (in python all variables are local):

  -- Variables are global by default.
  thisIsGlobal = 5  -- Camel case is common.

Local Variables

To specify a variable is only local, you need to include 'local' before the variable name:

  -- How to make a variable local:
  local line = io.read()  -- Reads next stdin line.

If Statement

C++ If statements are exactly the same as C#.

Operators

Within if statements and also within loops, the following relational and conditional operates exist (these are the same as C#):

Relational

Symbols Explanation
== Equal
!= Not equal
<= Less than or equal
>= Greater than or equal
< Less than
> Greater than

Conditional

Operator Description Example
&& Called Logical AND operator. If both the operands are non zero then condition becomes true. (A && B) is false
|| Called Logical OR Operator. If any of the two operands is non zero then condition becomes true. (A || B) is true.
! Called Logical NOT Operator. Use to reverses the logical state of its operand. If a condition is true then Logical NOT operator will make false. !(A && B) is true.

Loops

Just like other languages Lua has the standard 3 types of loop. While will run 0 or more times (may never run), Repeat (do..while) will run at least once, For will run an exact number of times:

Each of the loop structures in C++ are exactly the same as in C#.

Functions

Declaring a function

You can declare a function using the command 'function', the parameters will be within the round brackets '()'. The use of 'local' is not really required:

local function add(first_number, second_number)
	print(first_number + second_number)
end

add(2, 3) -- calling a method

Returning a value

You can return a value from a function by using 'return'

local function add(first_number, second_number)
	return first_number + second_number
end

print(add(5, 6))

Classes - Table Based

Just like other programming languages, Lua is can be used in an OOP way. Lua calls '{}' tables or meta tables, but they are the same as a class really:

Define a class

-- Meta class, class defined with {}, variables can be set like 'area'
Shape = {area = 0} 

-- Base class is named, followed by ':' to create a method for the class
function Shape:new (o,side)
   o = o or {} -- if an object is passed, use it or create an empty one
   setmetatable(o, self)
   self.__index = self
   side = side or 0 -- if side is passed, use it or set side to 0
   self.area = side*side;
   return o
end

-- Base class method printArea
function Shape:printArea ()
   print("The area is ",self.area)
end

Creating an object

-- Creating an object
myshape = Shape:new(nil,10)

--to access the methods of the object you need to use ':'
myshape:printArea()

Inheritance

Square = Shape:new()

-- Derived class method new

function Square:new (o,side)
   o = o or Shape:new(o,side) -- if an object is passed, use it or create a new shape
   setmetatable(o, self)
   self.__index = self
   return o
end

You can override an inherited method by redeclaring it:

-- Derived class method printArea

function Square:printArea ()
   print("The area of square is ",self.area)
end