Язык С++ был разработан в Bell Laboratories(США) в 1983г. как расширение языка С. Символы “++” – представляют оператор инкрементации в языке С, что в действительности означает выполнимость С-программ в среде С++. Еще одним источником С++ разработчик языка Б. Страуструп называет язык Simula67, из которого позаимствованы понятия класса, виртуальных функций. Класс соответствует введенному пользователем типу, для которого обеспечивается набор данных, операции над данными, их сокрытие и др. В настоящее время классы рассматриваются как носители таких черт объектно-ориентированного программирования как инкапсуляция, наследование, полиморфизм.
Существует несколько реализаций системы, поддерживающих стандарт С++, из которых можно выделить реализации Visual C++ (Microsoft), Borland C++ (Inprise), а также реализацию в системе UNIX. Отличия относятся, в основном, к используемым библиотекам классов и интегрируемым средам.
В С++ можно использовать потоковый ввод/вывод: оператор << осуществляет вывод в поток cout, оператор >> осуществляет ввод из потока cin. Такой ввод/вывод подддерживается включением файла <iostream.h>. Например:
// вывод строки символов (р01)
#include <iostream.h>
void main()
{
cout << “Hello, world \n”;
}
В программе р01 использован однострочный комментарий C++, который начинается от символов // и продолжается до конца строки. Наряду с таким комментарием, может быть использован обычный комментарий языка С, ограниченный символами /* и */. Программа выводит строку “Hello,world” в выходной поток cout , ‘\n’ – символ перехода к следующей строке.
Отметим, что функция main(), как и другие функции имеет возвращаемое значение, если не указан тип void. По умолчанию это значение типа int.
Язык С++ позволяет объявлять локальные переменные в любом блоке кода, которые будут известны только в этом блоке ниже объявления.
//вычисление факториала (р02)
#include <iostream.h>
main() //по умолчанию возвращает значение типа int
{
int n;
cout<<”введите число:”;
cin>>n; //ввод
int fact=1;
for(int j=n;j>=1;j--) fact=fact*j;
cout<<”факториал равен:”<<fact;
return 0;//возвращаемое значение
}
В С++ реализована перегрузка функций, что означает возможность использования функций с одним и тем же именем, но с различными типами либо количеством аргументов.
//перегрузка abs (р03)
#include <iostream.h>
int ABS(int n);
double ABS(double n);
main()
{
//вызов ABS (int)
cout<<"абсолютная величина-10:" << ABS(-10) << "\n";
//вызов ABS(double)
cout<<"абсолютная величина-10.01:"<< ABS(-10.01) << "\n";
return 0;
}
int ABS(int n)
{
cout << "В целом ABS()\n";
return n<0 ? -n : n;
}
double ABS(double n)
{
cout << "в double ABS() \n";
return n<0 ? -n : n;
}
В C++ используются аргументы функций по умолчанию. При этом один или несколько параметров при всех вызовах могут быть одинаковы, кроме особых случаев. Например:
void func(int x=0, int y=1);
//аргументы задаются только при первом объявлении
void main()
{
func(1,2);//значения по умолчанию не используются
func(1); //x=1,y=1
func(); //x=0, y=1.
}
void func(int x,int y)
{
int z=x+y;
}
Аргументы по умолчанию должны быть определены справа налево. Например, только левому аргументу присвоить значение нельзя.
В С++ реализован ссылочный тип, позволяющий передавать параметры функций не только по значению, но и по адресу. Например:
//функция меняет местами a и b (р04)
#include<iostream.h>
void swap(int &a, int &b)
{int c;
c=a;
a=b;
b=c;
}
void main()
{int a=3,b=4;
swap(a,b); // поменять местами
cout<<a<<b<<endl;
}
В С++ введены новые операции :: , new, delete. Оператор расширения области видимости “::” используется для доступа к членам базового класса (оператор вида basis::name), для указания внешней или глобальной области видимости, скрытой локальным контекстом (оператор вида ::global_name). Оператор class_name::name указывает доступ к элементам класса. Например, basis::func() означает принадлежность функции func() области видимости класса basis. Фактически этот оператор используется для указания маршрута к идентификатору. Рассмотрим пример:
#include <iostream.h> //p05
#include <conio.h>
int i=1;
class basis
{
public:
int i;
basis(){i=2;}
void func(){
cout<<::i<<" ";}//доступ к глобальной компоненте i=1
};
class inherit:public basis{
public:
int i;
inherit(){i=3;}
void func()
{
cout<<basis::i<<" ";//i=2
basis::func();//i=1
}
};
void main (){
basis ob1;
inherit ob2;
ob1.func();
ob2.func();
//cout<<basis::i<<" ";//i=2
//cout<<inherit::i;//i=3
while (!kbhit());
}
|