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

Обход инкапсуляции класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Оцените решение задачи http://www.cyberforum.ru/cpp-beginners/thread995360.html
Наткнулся тут на задание по программированию, от нечего делать решил его сделать на C++. Человеку его задали в университете, а я там никогда не учился, да и в С++ я новичок. Не знаю, в общем, как принято решать такие задания. Один ньюанс: я пока не умею работать с многофайловыми программами (лол), поэтому немного переделал задание. Без файлов, просто пользователь вводит строку, вводит, если...
C++ Необработанное исключение по адресу Необработанное исключение по адресу...нарушение прав доступа при чтении по адресу... #include <iostream> #include <conio.h> #include <math.h> #include <clocale> using namespace std; //помилка в визначенні відрізка ізоляції (ЕОМ вибирає ) float func(float);//основна функція float der1(float);//похідна 1-го порядку... http://www.cyberforum.ru/cpp-beginners/thread995355.html
C++ Видео курсы по С++
РЕбят может кто знает где скачать хорошие видео курсы по С++ ? Буду благодарен за ссылку
C++ Как ускорить работу (поиск вхождений подстроки)?
//подсчет kf int NumberKF(string &P, vector<string> & F, const int f){ int kf =0; for(size_t i = 0; i < f; ++i){ //обход по всем строкам for(size_t j = 0; j < F.size() - P.size() +1; ++j){ //по всем подстрокам длины l bool b = true; for(int g = 0; g < P.size(); ++g){ //проверка входжения if ((P != F) && (P != 'N')){ b = false; ...
C++ Друзья исправьте пожалуйста если что не так http://www.cyberforum.ru/cpp-beginners/thread995320.html
Написать программу, которая переводит число из 2-й системы счисления в 8-ю, не переводя все число в 10-ю . Выполнить отладку программы с помощью какого–либо примера, подготовленного Вами на бумаге. #include <iostream> #include <iomanip> #include <math.h> #include <conio.h> #include <String.h> #include <windows.h> using namespace std; int main() {
C++ Передача контейнера set в функцию Всем здравствуйте! Мне нужно написать функцию которая будет выводить всю информацию которая хранится в контейнере set. Пробовал передавать как обычную переменную, не получилось. В интернете информацию находил только по контейнеру map и там через итераторы передавалось, но у меня не получилось переписать под set. Вот функция для вывода: void put_set (char mn, set s) { set <int>::iterator ik;... подробнее

Показать сообщение отдельно
laucher
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 20
02.11.2013, 13:12     Обход инкапсуляции класса
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
34
35
36
37
#include <iostream>
 
using namespace std;
 
class My_class {
private:
    char* name;
public:
    My_class() {
        
            name = new char[100];
            cin>>name;
 
    }
    ~My_class() {
        if (name) {
            delete[] name;
        }
    }
    
    const char * getname() {
        return name;
    }
    void show() {
        cout<<name;
    }
};
 
int main() {
    My_class my;
    const char *    k = my.getname();
    char* n = (char* ) k; //  Здесь происходит смена типа с конст на не конст?
    *n = '1';//
    my.show();
    system("pause");
    return 0;
}
Консты я расставлял, так как думал, что это поможет защитить поле класса извне. Как видите, в мейне его изменить получается

Вопрос, как составить здесь грамотную защиту поля извне. Я думал о том, чтобы создавать локальную переменную в функции getname и возвращать её:
C++
1
2
3
4
5
    char * getname() {
        char * temp = new char[strlen(name) +1 ];
        strcpy(temp,name);
        return temp;
    }
Вопрос 1 : Не будет ли здесь утечек памяти? Ведь я выделяю память с помощью new, но у меня нет delete. Или она самоуничтожается при достижении конца функции?
Вопрос 2:
C++
1
2
3
const char *    k = my.getname();
    char* n = (char* ) k; //  Здесь происходит смена типа с конст на не конст?
    *n = '1';//
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru