Типове и декларации
Download
1 / 32

?????? ? ?????????? - PowerPoint PPT Presentation


  • 129 Views
  • Uploaded on

Типове и декларации. Доц. д-р Владимир Димитров e-mail: cht@fmi.uni-sofia.bg Web: cht_co.tripod.com Wap: http://www.wapdrive.com/cht_co. Типове Фундаментални типове Булев тип Символни типове Символни литерали Цели типове Цели литерали Реални типове Реални литерали Размери Тип void

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '?????? ? ??????????' - dougal


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
5255324

Типове и декларации

Доц. д-р Владимир Димитров

e-mail: cht@fmi.uni-sofia.bg

Web: cht_co.tripod.com

Wap: http://www.wapdrive.com/cht_co


5255324

Типове

Фундаментални типове

Булев тип

Символни типове

Символни литерали

Цели типове

Цели литерали

Реални типове

Реални литерали

Размери

Тип void

Изброявания

Декларации

Структура на декларациите

Деклариране на няколко имена едновременно

Имена

Област на действие

Инициализация

Обекти и lvalue

typedef

Заключение

Съдържание


5255324
Типове

x = y + f(2);

float x;

// x is a floating­ point variable i

inty = 7;

// y is an integer variable with the initial value 7

float f(int);

// f is a function taking an argument of type int and returning a floating­point number


5255324
Фундаментални типове

§4.2 A Boolean type (bool)

§4.3 Character types (such as char)

§4.4 Integer types (such as int)

§4.5 Floating­ point types (such as double)

§4.8 Enumeration types for representing specific sets of values (enum)

§4.7 A type, void, used to signify the absence of information

§5.1 Pointer types (such as int*)

§5.2 Array types (such as char[])

§5.5 Reference types (such as double&)

§5.7 Data structures and classes


5255324
Булев тип1

void f(int a,int b)

{

bool bl = a==b;// = is assignment, == is equality

//...

}

bool is_open(File*);

bool greater(int a, int b) { return a>b; }

bool b = 7; // bool(7) is true, so b becomes true

int i = true;// int(true) is 1, so i becomes 1


5255324
Булев тип2

void g()

{

bool a = true;

bool b = true;

bool x = a+b; // a+b is 2, so x becomes true

bool y = a | b;// a | b is 7, so y becomes true

}


5255324
Символни типове

char ch = 'a';

#include <iostream>

intmain()

{

char c;

std::cin >> c;

std::cout <<"the value of'"<< c <<"' is " << int(c) << '\n';

}


5255324
Цели типове

0123497612345678901234567890

decimal:026383

octal: 00020770123

hexadecimal: 0x00x20x3f0x53


5255324
Реални типове

1.23.230.231.1.0 1.2e10 1.23e-15

65.43 e - 21

3.14159265f 2.0f 2.997925F


5255324
Размери1

1 sizeof(char)  sizeof(short)  sizeof(int)  sizeof(long)

1 sizeof(bool)  sizeof(long)

sizeof(char)  sizeof(wchar_t)  sizeof(long)

sizeof(float)  sizeof(double)  sizeof(longdouble)

sizeof(N)  sizeof(signed N)  sizeof(unsigned N)


5255324
Размери 2

char:

'a'

bool:

1

short:

756

int:

100000000

int*:

&c1

double:

1234567e34

char[14]:

Hello, world!\0


5255324
Размери 3

#include <limits>

intmain()

{

cout << " largest float == " << numeric_limits<float>:: max()

<< ", char is signed == "

<< numeric_limits<char>::is_signed << '\n';

}


5255324
Тип void

void x; // error: there are no void objects

void f();// function f does not return a value

void* pv; // pointer to object of unknown type


5255324
Изброявания1

enum { ASM, AUTO, BREAK };

enum keyword { ASM, AUTO, BREAK };

voidf(keyword key)

{

switch(key) {

case ASM:

// do something

break;

case BREAK:

// do something

break;

}

}


5255324
Изброявания2

enum e1 { dark, light };// range 0:1

enum e2 { a = 3, b = 9 }; // range 0:15

enum e3 { min = -10, max = 1000000 };

// range -1048576:1048575

enum flag { x=1, y=2, z=4, e=8 }; // range 0:15

flag fl = 5; // type error: 5 is not of type flag

flag f2 = flag(5);

// ok: flag(5) is of type flag and within the range of flag

flag f3 = flag(z | e);

// ok:flag(12) is of type flag and within the range of flag

flag f4 = flag(99); // undefined: 99 is not within the range of flag


5255324
Декларации 1

char ch;

string s;

int count = 1;

constdouble pi = 3.1415926535897932385;

externint error_number; // int error_number = 1;

char* name = "Njal";

char* season[] = { "spring", "summer", "fall", "winter" };

struct Date{int d, m, y; };

int day(Date* p) { return p->d; }

double sqrt(double); // double sqrt(double) { /* … */ };

template<class T> T abs (T a) { return a<0 ? -a : a; }

typedef complex<short> Point;

struct User; // struct User { /* … */ };

enum Beer { Carlsberg, Tuborg, Thor } ;

namespace NS { int a; }


5255324
Декларации 2

int count;

int count; // error: redefinition

externint error _number;

externshort error_number;// error: type mismatch

externint error_number;

externint error_number;

struct Date { int d, m, y; };

typedef complex<short> Point;

int day(Date* p) { return p->d; }

constdouble pi =3.1415926535897932385;


5255324
Декларации 3

void f()

{

int count = 1;

char* name = "Bjarne";

// ...

count = 2;

name = "Marian";

}


5255324
Структура на декларацията

char* kings[] = { "Antigonus", "Seleucus", "Ptolemy" };

* pointerprefix

*constconstant pointerprefix

& referenceprefix

[] array postfix

() function postfix

const c = 7; // error: no type

gt(int a, int b) { return (a>b) ? a : b; } // error: no return type

unsigned ui; // ok: 'unsigned' is the type 'unsignedint'

long li;//ok: 'long'is the type 'longint'


5255324
Декларация на множество имена

int x, y; //int x; inty;

int* p, y; //int* p; int y; NOT int* y;

int x, *q; // int x;int* q;

int v[70], *pv; //int v[10];int* pv;


5255324
Имена

hellothis_is_a_most_unusually_long_name

DEFINEDfoObAru_nameHorseSense

var0 var1 CLASS_class ___

012a fool$sysclass3var

pay.duefoo-bar.nameif


5255324
Област на действие1

int x; // global x

void f()

{

int x; // local x hides global x

x = 1; // assign to local x

{

int x; // hides first local x

x = 2;// assign to second local x

}

x = 3; // assign to first local x

}

int* p = &x; // take address of global x


5255324
Област на действие 2

int x;

void f2()

{

int x = 1; // hide global x

::x = 2; // assign to global x

x = 2; // assign to local x

// ...

}


5255324
Област на действие 3

int x;

void f3()

{

int x = x; // perverse: initialize x with its own (uninitialized) value

}

int x= 11;

void f4()// perverse:

{

int y = x; // use global x: y = 11

int x = 22;

y = x; // use local x: y = 22

}


5255324
Област на действие 4

void f5(int x)

{

int x; // error

}


5255324
Инициализация

int a;// means "int a = 0;"

double d;// means "double d= 0.0;"

void f()

{

int x; // x does not have a well-defined value

// ...

}

int a[] = { 1, 2 };// array initializer

Point z(1, 2);

// function-style initializer (initialization by constructor)

int f(); // function declaration


Typedef
typedef

typedefchar* Pchar;

Pchar p1, p2; // pi and p2 are char*s

char* p3 = p1;

typedefunsignedchar uchar;

typedefint int32;

typedefshort int16;

typedeflong int32;


5255324
Съвети 1

  • Поддържай малки области на действие

  • Не използвай едно и също име дадена област на действие и обхващащата я

  • Декларирай по едно име в декларация

  • Стреми се обичайните и локалните имена да са кратки, необичайните и нелокалните имена да са по-дълги

  • Избягвай имена, които визуално си приличат

  • Поддържай цялостен стил на именоване


5255324
Съвети 2

  • Избирай внимателно имената, така че да отразяват смилъла, а не реализацията на променливата

  • Използвай typedefза да дефинираш име за вграден тип в случайте, при които вграденият тип се използва за представяне на стойност, и който тип може да се промени

  • Използвай typedefза да дефинираш синоними; използвай изброявания и класове за да дефинираш нови типове


5255324
Съвети 3

  • Във всяка декларация трябва да се задава тип (няма intпо премълчаване)

  • Избягвай излишни предположения за числовите стойности на символите

  • Избягвай излишни предположения за размера на целите числа

  • Избягвай излишни предположения за диапазона на реалните числа

  • За предпочитане е intпред shortintили longint


5255324
Съвети 4

  • За предпочитане е doubleпред floatили longdouble

  • За предпочитане е charпред signedcharи unsignedchar

  • Избягвай излишни предположения за размерите на обектите

  • Избягвай аритметиката без знак

  • Разгреждай с подозрение преобразуванията от signedв unsignedи от unsignedв signed


5255324
Съвети 5

  • Разгреждай с подозрениепреобразуванията от реални към цели числа

  • Разгреждай с подозрениепреобразуванията към по-малки типове, напр. от intкъм char


ad