Язык программирования С++ произошёл от Си.
Поддерживает разные парадигмы программирования, но, в сравнении с его предшественником — языком Си, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования. Однако в дальнейшем Си и C++ развивались независимо, что привело к росту несовместимостей между ними. При создании C++ стремились сохранить совместимость с языком Си. Большинство программ на Си будут исправно работать и с компилятором C++. C++ имеет синтаксис, основанный на синтаксисе Си. Последняя редакция Си, С99, добавила в язык несколько конфликтующих с С++ особенностей. Эти различия затрудняют написание программ и библиотек, которые могли бы нормально компилироваться и работать одинаково в компиляторах Си и C++, что, конечно, запутывает тех, кто программирует на обоих языках.
Язык С и его производные один из самых востребованных и высокооплачиваемых языков программирования.
C++ Developer. Professional Разработчик С++ (Углубленный уровень) Пройти тестирование на знание языка С++.
Бьёрн Строуструп, придумавший C++, неоднократно выступал за максимальное сокращение различий между Си и C++ для создания максимальной совместимости между этими языками. Противники же такой точки зрения считают, что так как Си и C++ являются двумя различными языками, то и совместимость между ними не так важна, хоть и полезна. Согласно этому лагерю, усилия по уменьшению несовместимости между ними не должны препятствовать попыткам улучшения каждого языка в отдельности. Бьёрн Страуструп, Бьярне Строуструп (дат. Bjarne Stroustrup произношение род. 11 июня 1950 (по другим сведениям, 30 декабря), Орхус, Дания) - автор языка программирования C++.
Передать аргументы функции в С++ можно тремя сопособами: передача по значению, передача по ссылке(Ссылка) и передача по указателю(Указатели в C++).
| Передача по значению | Передача по ссылке(Ссылка) | Передача по указателю(Указатели в C++) в случае динамического массива | |
| Переменная | #include <iostream>
/*
* передача по значению
*/
using namespace std;
int ByValue( int ); //прототип (передача по значению)
int main() {
int x=2;
cout<<"x = "<<ByValue(x)<<endl;
return 0;
}
int ByValue (int number)
{
return number*=number;// аргумент вызывающего не изменяется
}
| #include <iostream>
/*
* передача по ссылке
*/
using namespace std;
void ByReference( int & ); //прототип (передача по ссылке)
int main() {
int x=4;
cout<<"x = "<<x<<endl;
ByReference(x);
cout<<"x = "<<x<<endl;
return 0;
}
void ByReference (int &numberRef)
{
numberRef*=numberRef;// аргумент вызывающего модицируется
}
| |
| Одномерный Массив | В С++ массивы автоматически передаются по ссылке, а не по значению. Но для отдельных элементов массива нужно явным образом применять & иначе будет передаваться по значению, а не по ссылке. То есть нужно различать способ передачи массива целиком и его элементов. | #include <iostream>
/*
* передача по ссылке
*/
using namespace std;
void modifyArray( int [], int ); //прототип передачи по ссылке
void modifyElement( int ); //прототип передачи по значению элемента массива
void modifyElementRef( int &); //прототип передачи по ссылке элемента массива
int main() {
const int arraySize = 5;
int arr[arraySize] = {0,1,2,3,4}; //инициализация массива
//передать массив arr в modifyArray по ссылке. передать размер массива.
modifyArray( arr, arraySize);
for (int j=0;j < arraySize;j++) cout<<arr[j];
cout<<"\n";
modifyElement( arr[3]);
modifyElementRef( arr[3]);
for (int j=0;j < arraySize;j++) cout<<arr[j];
cout<<"\n";
return 0;
}
//b указывает в памяти на исходный массив arr
void modifyArray (int b[], int sizeOfArray)
{
//умножить каждый эелемент массива на 2
for (int k=0;k < sizeOfArray;k++) b[k]*=2;
}
void modifyElement( int e)
{//e является локльной копией элемента массива arr[3]
//умножить параметр на 2
cout<<(e*=2)<<endl;
}
void modifyElementRef( int &eRef)
{//eRef является ссылкой на элемент массива arr[3]
//умножить параметр на 2
eRef*=2;
}
| |
| Двумерный Массив (матрица) | #include <iostream>
/*
* передача по ссылке двумерного массива
*/
using namespace std;
const int row = 2, col =3;//описание размерности массива
void printArray( int [][col]); //прототип передачи по ссылке для двумерного массива
int main() {
int arr1[2][3] = {0,1,2,3,4}; //инициализация массива
//передать массив arr1 в printArray по ссылке
printArray( arr1);
return 0;
}
void printArray (int a[][col])
{
//вывести элементы массива
for (int r=0;r < 2;r++){
for (int c=0;c < col;c++)
cout<<a[r][c];
}
}
|
Листинг на языке C++
//Код C++ for (int i=0;i<argc;i++, *argv++){ cout<<*argv<<"\n"; }; //OR for (int i=0;i<argc;i++){ cout<<argv[i]<<'\n'; if(strcmp(argv[i],"-kk")==0) cout<<"-kk key ";//обработка ключа };
Листинг на языке C
//Код C #include <stdio.h> int main( int argc, char ** argv ){ while ( argc-- ) printf("%s\n", *argv++); return 0; }
#include <stdio.h> int main(int argc, char *argv[]){ int i=0; for (i=0;i<argc;i++){ printf("Argument %d: %s\n",i,argv[i]); }; };