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

константная ссылка в качестве аргумента конструктору копирования - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти причины возникновения и исправить ошибку 'man' was not declared in this scope http://www.cyberforum.ru/cpp-beginners/thread1792960.html
#include <iostream> #include <Windows.h> #include <ctime> using namespace std; class Passport { private: int ID;
C++ Порядок вычисления: операторы «|» и «||», «&» и «&&» В Java булевые операторы «|» и «||», и «&» и «&&» отличаются друг от друга порядком вычеслений, а в C++ так же как и в Java или по-другому? http://www.cyberforum.ru/cpp-beginners/thread1792958.html
C++ Нюансы синтаксиса: использование using
Всем доброе утро, вообщем хотел спросить давно уже, а что делает using, помимо вот такого его применения using std::cout; //... вот HelicopterK52, преводил в соседней теме struct Base {
C++ Наследуются ли конструкторы?
Привет. Хочу спросить, если базовый класс имеет открытый конструктор по умолчанию, то при открытом наследовании будет ли создан конструктор по умолчанию в прямом производном классе, если он не определен явно(стоит сказать, что явно определены другие конструкторы, но не конструктор по умолчанию)?
C++ Когда необходимы определения членов-перемещения http://www.cyberforum.ru/cpp-beginners/thread1792905.html
Дарова всем. Не так давно прочел про конструкторы перемещения и соотв. операторы присваивания с перемещением. И возник такой вопрос: эти методы нужно определять только когда класс работает с динамической памятью? А для таких классов смысла определения операций перемещения нет? class { int x, y;
C++ Удалить из матрицы нулевые строки и столбцы и найти строку, содержащую хотя бы один положительный элемент Дали три задачи на зачетную. С массивами у меня более менее нормально, но вот сами задания, что от меня требуется - понять не могу. Может кто решал что-то подобное или понимает, что здесь нужно сделать? В общем прошу помочь с этими задачами. Спасибо. P.S. Оформлять нужно не в консольном, а в Форме. Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполнен-ные нулями. Найти номер... подробнее

Показать сообщение отдельно
DannyConnor
2 / 2 / 0
Регистрация: 11.10.2015
Сообщений: 38
Завершенные тесты: 1

константная ссылка в качестве аргумента конструктору копирования - C++

12.08.2016, 12:10. Просмотров 192. Ответов 2
Метки (Все метки)

доброго времени суток! реализую класс String для работы со строками, программа не компилируется, если я передаю в качестве аргумента константную ссылку класса String в конструктор копирования и работает, если убираю const (и в заголовке, и в определении). До этого было с точностью наоборот (без const не работало). см вложение

Visual Studio Community 2015
в g++ нормально компилирует и так, и так, не считая предупреждения

Source.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <conio.h>
#include "String.h"
 
using namespace::std;
using Programm::String;
 
int main(int argc, char** arhv) {
    setlocale(LC_ALL, "Russian");
 
    String st1("Alexandra");
    String st2(st1);
 
    cout << st1 << endl;
    cout << st2 << endl;
 
    _getch();
    return 0;
}
String.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#include <iostream>
#include <cstring>
 
namespace Programm
{
    class String
    {
    private:
        char* str;
        int length;
    public:
        String();
        String(char*);
        String(const String&);
        friend std::ostream& operator<<(std::ostream&, String&);
        ~String();
    };
 
}
String.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "String.h"
 
namespace Programm
{
    String::String() {
        str = NULL;
        length = 0;
    }
    String::String(char* st) {
        length = strlen(st);
        str = new char[length+1];
        for (int i(0); i < length; i++)
            str[i] = st[i];
        str[length] = '\0';
    }
 
    String::String(const String& st) {
        length = strlen(st.str);
        str = new char[length + 1];
        for (int i(0); i < length; i++)
            str[i] = st.str[i];
        str[length] = '\0';
    }
 
    std::ostream& operator<<(std::ostream& os, String& st) {
        os << st.str;
        return os;
    }
 
    String::~String() {
        delete[] str;
    }
}
Миниатюры
константная ссылка в качестве аргумента конструктору копирования  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru