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

Указатель на объект с перегруженным оператором вывода(с наследованием) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Чем заголовочные файлы отличаются от обычных бибилиотек? C++ http://www.cyberforum.ru/cpp-beginners/thread804767.html
вроди как это одной и тоже, только в стандартной библиотеки C все файлы заголовочные, а в C++ обычные библиотеки... В чем разница между ними, ведь и там и там лежат подобные сущности.
C++ Ругается компилятор Создать класс жидкость, имеющий название (указатель на строку), плотность. Определить конструкторы, деструктор и операторы вывода в поток. Создать производный класс - спиртные напитки, имеющий... http://www.cyberforum.ru/cpp-beginners/thread804763.html
C++ Найти количество действительных корней квадратного уравнения
не могу найти ошибку.Компилятор ругается Суть задачи : Определить кол-во действительных корней квадратного уравнения ax^2+bx+c=0 с произвольными значениями a,b,c. #include <iostream> #include...
C++ вывести значение числа цифр в дробной части числа
#include "stdafx.h" #include <locale.h> #include <conio.h> #include <iostream> using namespace std; class Chislo { double x;
C++ microsoft visual studio http://www.cyberforum.ru/cpp-beginners/thread804749.html
Ребят, а подскажите, вот написал я программный код.А как мне его проверить через Dos Гляжу другие ребята как-то вставляют код, и в Досе высвечивается программка, код которой в microsoft visual studio
C++ Списки на STL (вставить после каждого простого числа удвоенное среднее геометрическое всех элементов последовательности) Задание следующее: В числовой последовательности вставить после каждого простого числа удвоенное среднее геометрическое всех элементов последовательности. Надо сделать с помощью списков из STL Сам... подробнее

Показать сообщение отдельно
k0z@k
37 / 37 / 8
Регистрация: 30.11.2011
Сообщений: 112

Указатель на объект с перегруженным оператором вывода(с наследованием) - C++

10.03.2013, 17:26. Просмотров 229. Ответов 1
Метки (Все метки)

Есть два класса: строка(базовый) и комплексное число(производный). В базовом классе есть поле stri (указатель на char). В производном классе есть перегруженный оператор вывода для этого поля.
Как следует написать этот оператор(или что-либо ещё изменить), чтобы он выдавал на экран stri, а не адрес памяти?

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "stdafx.h"
#include "iostream"
using namespace std;
 
int ck=0,cf=0;
 
size_t strpos(const char *haystack,const char *needle) {
    int sleng=strlen(haystack);
    int nleng=strlen(needle);
    if (sleng!=0 && nleng!=0) {
        for (int i=0,j=0;i<sleng;j=0,i++) {
            while (i+j<sleng && j<nleng && haystack[i+j]==needle[j])
                j++;
            if (j==nleng)
                return i;
        }
    }
    else
        return -1;
}
 
bool isnum(char n) {
    char* ten=new char[10];
    strcpy(ten,"0123456789");
    if (strstr(ten,&n))
        return 1;
    else
        return 0;
}
 
class StringType {
protected:
    char *stri;
    int len;
public:
    StringType() {
        len=0;
        stri = new char[len];
    }
    StringType(char *stri) {
        len=strlen(stri);
        this->stri=stri;
    }
    virtual bool getcheckstate() {return 0;};
    ~StringType() {
        len=0;
        delete [] stri;
    }
    /*void setstr(char *stri) {
        len=strlen(stri);
        this->stri=stri;
    }*/
    char *getstr() {
        return stri;
    }
};
class tcomplex:public StringType {
private:
    int ipos;
    bool checkstate;
    int getpos() {
        return ipos;
    }
    bool check(char *compl) {
        for (int i=0;i<strlen(compl);i++) {
            if (compl[i]=='+' || compl[i]=='-' || compl[i]=='i' || isnum(compl[i]) ) {
                checkstate=1;
                return 1;
            }
        }
        checkstate=0;
        return 0;
    }
public:
    tcomplex():StringType("0i0"){
        ipos=1;
        checkstate=1;
    }
    tcomplex(char *compl):StringType(compl){
        if (check(compl)) {
            ipos=strpos(compl,"i");
        }
        else
            cout<<"Ошибка! Число задано неверно!"<<endl;
    }
    friend ostream& operator<<(ostream& os,StringType& compl) {
        //char *t=compl.getstr();
        os<<compl.getstr();
        return os;
    }
    ~tcomplex();
};
 
int main()
{
    StringType *f=new tcomplex("-4i+5");
    cout<<f<<endl;
    system("pause");
    return 0;
}
P.S. если при выводе при вывод делать таким образом
C++
1
cout<<*f<<endl;
то компилятор ругается - "отсутствует оператор соответствующий этим операндам"
компилю в вижуал студио 2010
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru