• No results found

Comp151. Definitions & Declarations

N/A
N/A
Protected

Academic year: 2021

Share "Comp151. Definitions & Declarations"

Copied!
11
0
0

Loading.... (view fulltext now)

Full text

(1)

Comp151

(2)

Example: Definition

/* reverse_print.cpp */

#include <iostream> #include <string>

using namespace std;

int global_var = 23; // global variable definition

void reverse_print(const char* s) // function definition {

for (int j = strlen(s) - 1; j >= 0; --j) cout << s[j];

cout << endl; }

(3)

Example: Declaration

/* use_reverse_print.cpp */

#include <iostream>

using namespace std;

extern int global_var; // external variable declaration

extern void reverse_print(const char* s); // external function declaration

int main(int argc, const char* argv[])

{

float local_var; // local variable definition

local_var = 987.654;

cout << ''global var = '' << global_var << endl; cout << ''local var = '' << local_var << endl; cout << ''input string backwards = '';

reverse_print(argv[1]); }

(4)

Definition

• A definition introduces a variable's or a function's name

and type.

• A variable definition reserves a number of bytes of

memory for the variable.

• A function definition generates code for the function.

• In both cases, definitions cause the compiler to allocate

memory to store the variable or function code.

An object must be defined exactly once in a program.*

(5)

Declaration

The declaration of a variable (or function) announces that the variable (or function) exists and is defined somewhere else (in the same file, or in a different file). The connection is made when the object files are linked.

• A variable declaration consists of the variable's name and its type preceded by the keyword extern.

• A function declaration consists of the function prototype (without the function body) preceded by the keyword extern.

• A (forward) class declaration consists of the class name (without the class body) preceded by the keyword class.

• A declaration does not generate code, and does not reserve memory. • There can be any number of declarations for the same object name in a

program (as long as they’re consistent with each other).

• If a declaration is used in a file different from that with the definition of the object, the linker will insert the real memory address of the object instead of the symbolic name.

• In C++, a variable must be defined or declared to the program before it is used.

(6)

A word on class definitions

• A class definition defines a type.

• Note that merely defining a type or class does not

generate code. (The code for any member function of

the class is not generated until the compiler sees an

individual member function definition.)

• In this sense, class definitions are unlike variable and

function definitions, which cause the compiler to allocate

memory to store the variable or function code.

• But class definitions are still like variable and function

definitions in the sense that a class must be defined

exactly once in a program.

(7)

Advantages of Header Files

• In general, a header file provides a centralized location for:

– external object declarations

– function declarations & member function declarations

– type definitions

– class definitions (but not member function definitions, except inline)

– inline function definitions & inline member function definitions

• The advantages are:

– 1. By including the header files, all files of the same piece of

software are guaranteed to contain the same declaration for a

global object or function.

– 2. Should a declaration require updating, only one change to the

header file will need to be made.

(8)

A question…

/* C++ code fragment – uses Date class from separate compilation lecture */

Date d1(2, 17, 2006); Date d2;

d2 = d1;

d1.set(2, 20, 2006);

d2.print(); // what gets printed here?

/* Java code fragment – looks nearly identical to above C++ code fragment */

Date d1 = new Date(2, 17, 2006); Date d2;

d2 = d1;

d1.set(2, 20, 2006);

(9)

Variables

A variable is a symbolic name

assigned to some memory

storage.

The size of this storage

depends on the type of the

variable, compiler, and platform.

– e.g., on x86 under Windows, char is 1 byte long and int is 4 byte long.

The difference between a

variable and a literal constant is

that a variable is addressable.

354 76 . . . . . . 2000 2004 :x :y

(10)

Key distinction: lvalue vs. rvalue

A variable has dual roles, depending on where it appears in the

program, it can represent

lvalue: the location of the memory storage

rvalue: the value in the storage

They are so called because a variable represents an lvalue (or

rvalue) if it is written to the left (or right) of an assignment statement.

Thus, the following are invalid statements in C++:

4 = 1;

grade + 10 = new - grade;

x: x+1

(11)

Not all languages distinguish rvalues from lvalues

the way that C++ does!

/* C++ code fragment – uses Date class from separate compilation lecture */

Date d1(2, 17, 2006); Date d2;

d2 = d1;

d1.set(2, 20, 2006);

d2.print(); // prints 2006.02.17

/* Java code fragment – looks nearly identical to above C++ code fragment */

Date d1 = new Date(2, 17, 2006); Date d2;

d2 = d1;

d1.set(2, 20, 2006);

References

Related documents

Under this scenario, and based on the vast collection of data related to the persistent border obstacles faced by EU citizens across EU borders, we strongly propose that the

to be paid or delivered in consummation of a sale, without any discount from the price on account of the cost of materials used, labor or service cost, and exclusive of any

Persist all instances, class definitions and association definitions in a metamodel by serializing them and saving to a path on disk. xtuml.persist_instances(metamodel,

shift bands, reduction gears, bearings, shafts, bearing carriers, hydraulic pump, hydraulic pistons, valve body, drive plate, temperature switches, neutral safety switch,

general executive and administration offices of the hospital(s), i.e., offices of the Hospital Administrator, Hospital Executive Directors, Hospital Financial Management, etc. •

IL-6 production was significantly reduced in colon epithelial cells when stimulated with cecal contents from PD-1 −/− mice (Fig. 4A), which indicates direct influence of

We shall define a function [[−]]: Exp → CSScodes which takes a CSS program expression and turns it into CSS code.. Definitions 2.1.4 The function [[−]]: Exp → CSScodes is specified

Appendix – Definitions of Account Codes – Revenue Major Class Codes Major Class Code Allowable Funds Account Name/Description.. 100 Revenue from