Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


начало комментария; */ - конец комментария.




Вся последовательность, заключенная между этими символами, является комментарием.

Это удобно для написания многострочных комментариев:


int a; /* целая
переменная */

Многострочные комментарии также удобно использовать при отладке для сокрытия от выполнения части кода.

В дополнение к этому, для написания коротких комментариев могут использоваться символы //. При этом комментарием является все, что расположено после символов // и до конца строки:

 

float b; // вещественная переменная

 

Главная функция

При выполнении консольного приложения, написанного на языке Си, операционная система компьютера передаёт управление функции с именем main(). Функцию main() нельзя вызывать из других функций программы, она является управляющей.

Следующие за именем функции круглые скобки предназначены для указания параметров (аргументов), которые передаются в функцию при обращении к ней. В данном случае операционная система не передаёт в функцию main() никаких аргументов, поэтому список аргументов в круглых скобках пустой.

Главную функцию можно записать по-разному:

· int main()

· void main().

Перед именем функции указывается тип возвращаемого значения. При обращении к главной функции значение возвращается операционной системе. Последняя запись не будет возвращать значения. Однако void main() - не совсем корректная запись, так как сообщает компилятору, что функция main() не возвращает никакого значения.

При этом запись int main() сообщает компилятору о возвращении целочисленного значения, которое необходимо операционной системе и сообщает ей о том, что программа завершилась корректно. Если же это значение не возвращено, то операционная система понимает, что программа завершилась в аварийном режиме.
Для возврата целочисленного значения перед завершением функции добавляется строка

 

return 0; // вещественная переменная


В фигурные скобки заключены описания и операторы.

В общем случае программа может содержать несколько функций. Каждая функция имеет список передаваемых в нее параметров, указанный в круглых скобках, и набор операций, заключенных в блок, ограниченный фигурными скобками.


Пример: Вывод на экран сообщения "Hello, world!".

#include <stdio.h> // Подключение библиотеки ввода-вывода
int main() // Главная функция
{
printf("Hello, world!"); // Вывод сообщения
getchar(); // Задержка окна консоли
return 0;
}


Результат работы программы:

Теперь попробуем написать текст на русском языке.

#include <stdio.h>
int main()
{
printf("Здравствуй, мир!");
getchar();
return 0;
}


Результат работы программы:

Проблема русского языка в консольных приложениях заключается в том, что консоль и редактор кода Microsoft Visual Studio поддерживают разные кодовые страницы. Для того, чтобы увидеть русские символы в консоли необходимо поменять кодовую страницу в консоли, чтобы она соответствовала кодовой странице редактора (1251). С этой целью вызывается функция system("chcp 1251") с соответствующей командной строкой. Прототип функции system() содержится в библиотеке <stdlib.h>.

При этом текст программы будет выглядеть следующим образом:

#include <stdio.h>
#include <stdlib.h>
int main()
{
system("chcp 1251"); // Текущая кодовая страница 1251
system("cls"); // Очистка консоли
printf("Здравствуй, мир!"); // Вывод сообщения
getchar();
return 0;
}

Результат работы программы:

 

Вопрос 2:Дружественные функции в C++.Пример

Иногда требуется, чтобы функция – не член класса, имела доступ к скрытым членам класса. Основная причина использования таких функций состоит в том, что некоторые функции нуждаются в привилегированном доступе более, чем к одному классу. Такие функции получили название дружественных.

Для того, чтобы функция – не член класса имела доступ к private-членам класса, необходимо в определение класса поместить объявление этой дружественной функции, используя ключевое слово friend. Объявление дружественной функции начинается с ключевого слова friend и должно находиться только в определении класса.

void func() {...}
class A {
...

friend void func();
};

Дружественная функция, хотя и объявляется внутри класса, функцией-членом не является. Поэтому не имеет значения, в какой части тела класса (private, public) она объявлена.

Функция-член одного класса может быть дружественной для другого класса.

class A
{...

int func();
};
class B
{...

friend int A:: func();
};

Функция-член func() класса A является дружественной для класса B.
Если все функции-члены одного класса являются дружественными функциями второго класса, то можно объявить дружественный класс:
friend class ИмяКласса;

class A {
...
};
class B
{...

friend class A;
};

Все функции-члены класса А будут иметь доступ к скрытым членам класса В.

Пример Рассмотрим классы

  • vect – одномерный массив;
  • matrix – двумерный массив.

Необходимо написать функцию умножения вектора на матрицу. Такая функция должна иметь доступ к закрытым членам обоих классов. Это будет функция, дружественная обоим классам. Так как объявление дружественной функции появляется в обоих классах, и в качестве типов аргументов используется каждый класс, необходимо предварительное объявление (прототип) одного из классов перед определением другого.

Например класса matrix перед vect.

#include <iostream>
using namespace std;
class matrix; // прототип класса matrix
class vect {

int *p;

int size;
public:

vect(int s=0) {

p = new int[s];

for(int i=0;i<s;i++)

p[i] = 0;

size = s;

}

void in(void) {

for(int i=0;i<size;i++)

{

cout << "vect[" << i << "]=";

cin >> p[i];

}

}

void out(void) {

cout << "vect: ";

for(int i=0; i<size; i++)

cout << p[i] << " ";

}

friend vect mult(const vect &, const matrix &);
};
class matrix {

int **base;

int column_size, row_size;
public:

matrix(int col=0, int row=0) {

base = new int*[row];

for(int i=0; i<row; i++) {

base[i] = new int[col];

for(int j=0;j<col;j++)

base[i][j] = 0;

}

column_size = col;

row_size = row;

}
void in(void) {

for(int i=0;i<row_size;i++)

for(int j=0;j<column_size;j++)

{

cout << "matrix[" << i << "][" << j << "]= ";

cin >> base[i][j];

}
}
void out(void) {

cout << "matrix: " << endl;

for(int i=0;i<row_size;i++) {

for(int j=0;j<column_size;j++)

cout << base[i][j] << " ";

cout << endl;

}
}
friend vect mult(const vect &, const matrix &);
};

vect mult(const vect &v, const matrix &m) {

int i, j;

vect rez(m.column_size);

if(v.size!=m.row_size) {

cout << "No rezult " << endl;

return(rez);

}

for(j=0; j<m.row_size; j++) {

rez.p[j]=0;

for(i=0; i<m.row_size; i++)

rez.p[j]+=v.p[i]*m.base[i][j];

}

return(rez);
}
int main() {

vect v(3);

matrix m(2,2);

v.in();

m.in();

v.out();

cout << endl;

m.out();

vect r= mult(v,m);

r.out();

cin.get(); cin.get();

return 0;

}

Результат выполнения

 





Поделиться с друзьями:


Дата добавления: 2017-02-11; Мы поможем в написании ваших работ!; просмотров: 368 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наука — это организованные знания, мудрость — это организованная жизнь. © Иммануил Кант
==> читать все изречения...

2329 - | 2119 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.