Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
#1

Конструктор копирования, типы данных. - C++

14.01.2011, 18:45. Просмотров 1560. Ответов 8
Метки нет (Все метки)

1) Как я понял из прочтения есть конструктор по-умолчанию, который создается по-умолчанию компилятором, но можно и самому явно указать конструктор не принимающий параметров это и будет конструктор по-умолчанию, но в нем теперь можно проинициализировать элементы класса. Если указать ещё один конструктор, но который принимает параметры, то это будет уже не конструктор по-умолчанию и вступать в работу он будет, когда создается объект и передаются параметры. Существует также конструктор копирования. В его объявление должен присутствовать указатель на объект такого же класса откуда конструктор. Получив указатель конструктор поэлементно копирует значения элементов одного объекта в элементы другого объекта. Данный конструктор используется, когда создается объект и сразу же производится его инициализация, то есть что-то вроде этого:
C++
1
2
3
4
5
6
class time
{
.....
};
time object1;
time object2 = object1; // вот здесь вступит в работу конструктор копирования, да?
Есть другой способ копирования значений одного объекта в значения другого объекта - это перегрузка оператора присвоение. Она вступает в работу, когда используется простое присвоение одного объекта другому, но при этом оба объекта уже созданы, да?


2) не могу понять, что такое объявление и определение? расскажите, пожалуйста, своими словами.

3) Хотел бы спросить ещё про типы данных. На сколько я понял указание типа данных во-первых нужно для того, чтобы знать сколько памяти выделить под данные, во-вторых для того, чтобы знать в какой форме эти данные представить(записать) в ячейку памяти. В-третьих типы данных указывают какие операции можно произвести над операндами, а какие нет(это защита от глупости, например от возведения указателя в квадрат - это не логично). Если операнды имеют разные типы данных и над ними пытаются произвести какую-нибудь операцию, то операнды попробую привести к одному типу(например, если складывают int и long, то в памяти на которую указывает переменна типа int будет прибавлено пару байт, то есть имя переменной будет уже указывать на большее число байт памяти). Если же компилятору операция покажется нелогичной например сложение символьного типа и int, то компилятор выдаст ошибку. Объявление типа данных с этой точки зрения даёт возможность компилятору отслеживать какие операции логичны, а какие нет. Но, даже, если операция не логична, то можно послать компилятор и сказать ему, что да я понимаю, что операция нелогичная, но я осознаю, что делаю - это действие называется явным приведение типов.

Просьба прокомментируйте все моменты, желательно до последней мелочи, хочу понимать всё, как есть. И укажите, где и что не правильно сказано, а где и вовсе глупости. Заранее благодарю!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2011, 18:45     Конструктор копирования, типы данных.
Посмотрите здесь:

C++ Конструктор копирования
Конструктор копирования C++
C++ конструктор копирования
Конструктор копирования C++
C++ Конструктор копирования
C++ конструктор копирования
Конструктор копирования C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1636 / 1264 / 129
Регистрация: 21.12.2010
Сообщений: 1,925
Записей в блоге: 7
14.01.2011, 19:00     Конструктор копирования, типы данных. #2
Цитата Сообщение от FanAizu Посмотреть сообщение
2) не могу понять, что такое объявление и определение? расскажите, пожалуйста, своими словами.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
using namespace std;
 
int f(int);  //объявление
 
int main(){
    int a=f(5);
    cout<<a;
}
 
int f(int a){  //определение
    return a*a;
}
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
14.01.2011, 19:23  [ТС]     Конструктор копирования, типы данных. #3
а словами можно? что-то я логики не прослеживаю.
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
14.01.2011, 19:25     Конструктор копирования, типы данных. #4
FanAizu, Прототип функции это ее обявление, а реализация - определение.
papochka
32 / 32 / 2
Регистрация: 14.11.2009
Сообщений: 137
14.01.2011, 19:40     Конструктор копирования, типы данных. #5
потёрто...
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
14.01.2011, 19:43  [ТС]     Конструктор копирования, типы данных. #6
В общем, когда память выделяется реально, то это определение, например вот определения:
int a;
char b;
Time object; // time это имя класса
реализация функции

А объявления никакой памяти не выделяют, то есть объявление это:
прототипы функций, класс, структура.

всё верно?
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.01.2011, 19:55     Конструктор копирования, типы данных. #7
наоборот
C++
1
2
3
4
//определение
class myclass {
////
};
C++
1
2
3
//объявление
int a;
myclass mine; //неявная иницилизация - вызов конструктора по умолчанию
C++
1
2
3
//иницилизация
а = 5;
mine = your;
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
14.01.2011, 20:17  [ТС]     Конструктор копирования, типы данных. #8
ну теперь опять непонятно, я так полагал, что например объявление это когда под констркцию реально выделяется память, а определение это когда конструкция что-то описывает, но память под нее не выделяется. в чем разница?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2011, 20:30     Конструктор копирования, типы данных.
Еще ссылки по теме:

C++ Конструктор копирования
C++ Конструктор копирования
Конструктор копирования C++
Конструктор копирования C++
Конструктор копирования C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
14.01.2011, 20:30     Конструктор копирования, типы данных. #9
FanAizu
C++
1
2
3
4
5
6
7
8
9
10
//1.cpp
int getA(); //объявление
//...
int p = getA() * 10;
//...
 
//2.cpp
int getA(){ //определение
  return a;
}
когда компилятор будет компилировать первый файл он будет думать: "так где то есть функция int getA(void), я не знаю что она делает, и даже не знаю где она может быть, но у нее такие параметры и она возвращает тото", объявление требуется для того, чтобы вы могли в коде использовать функции (аналогично с переменными), которые не определены в данной единице компиляции

в примере что делает компилятор:
1. компилирует файлы 1.cpp, 2.cpp - каждый по отдельности, когда он будет компилировать 1.cpp он даже не будет знать где тело функции getA, результатом будет объектные файлы 1.obj, 2.obj
2. потом пойдет линковка - линковщик увидит, что в 1.cpp используется не определенная функция, и начнет искать ее в других объектных файлах, если найдет - подставит адрес, или нечто в этом духе
Yandex
Объявления
14.01.2011, 20:30     Конструктор копирования, типы данных.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru