Часть 2. Я начинающий, подскажите как...(Все вопросы начинающих!!!)
ListBox1->Columns=3;
каким образом записать строку в второй и третий столбцы?
IsMdiContainer = true;
Помещаю по центру Label с определенным текстом, ставлю чтоб он всегда был по центру.
Но когда создаю форму (MDIChild) она оказывается позади Label, как мне сделать так что бы Label был всегда позади открытых VDIChild'ов
В визуальном дизайнере должно быть меню изменения Z-order'а.Отправь Label в самый зад:)
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 20
int main()
{
int i;
int m[N];
srand(time(NULL));
printf("m: ");
for(i = 0; i < N; i++)
{
m = rand()%100+1;
printf("%i ",m);
}
//Нахождение элементов массива m, у которых остаток от деления на 2 не равняется 0//
for(i=0;i<N;i++)
{
if (m%2!=0&&m>0)
k+=1;
printf("%d",k);
}
//Формируем новый массив из нечетных элементов k//
int p[K];
for (i=1;i<K;i++)
{
if (m%2!=0,m>0)
{
p[K]=m;
K+=1;}
for(i = 0; i < K; i++)
printf("p: ");
}
return 0;
}
Спасибо за ответ, поискал информацию в этом направление.
На msdn нашел такую информацию:
Соответственно для C# так же необходимо использовать эти 2 функции.
Попробовал, label1.SendToBack(), и мой лабел ушел по Z порядку ниже чем контрол MdiClient.
Получается что я не могу установить Z порядок внутри MdiClient для не помещенных туда контролов, а лабел поместит туда нельзя.
Решил следующим образом:
создал еще 1 форму
поместил на нее мои label'ы
у формы установил свойство FormBorderStyle = None
при создание основной формы с MdiClient контролом та же создаю форму с label'ами
и что бы на эту форму не переходил фокус установил свойство Enabled = false;
http://lib.ru/CPPHB/cpptut.txt
Раздел: "1.2.5 Объектно-ориентированное программирование"
Там фактически твоя задачка.
Да и вообще рекомендую к прочтению.
Если понадобится больше информации:
http://lmgtfy.com/?q=C%2B%2B+%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
;)
Задача: Михаэль и Ральф Шумахеры решили помериться силами,проехав новую китайскую трассу.Ральф подумал,что разобьет трассу на равные интервалы, и каждый из них будет проходить с разной скоростью, выбирая оптимальную скорость для каждого участка пути. Михаэль, в свою очередь, решил,что лучше всю трассу проехать с одинаковой скоростью.В результате оба брата финишировали одновременно. Необходимо, зная скорость Ральфа Шумахера на каждом участке трассы определить, с какой скоростью трассу прошел Михаэль.
Формат входных данных: в первой строке входного файла задано целое число N- количество участков трассы,на границах которых менял скорость Ральф.(1<=N<=100000)
во второй строке через пробел записаны целые числа Vi(i=1..N),каждое из которых соответствует скорости болида Ральфа на i-ом участке.
Формат выходных данных: в выходной файл наша программа должна вывести одно число-скорость болида Михаэля в этой гонке с точностью до четырех знаков после десятичной точки.
имя входного файла:input.txt, имя выходного: output.txt/
Задача: Михаэль и Ральф Шумахеры решили помериться силами,проехав новую китайскую трассу.Ральф подумал,что разобьет трассу на равные интервалы, и каждый из них будет проходить с разной скоростью, выбирая оптимальную скорость для каждого участка пути. Михаэль, в свою очередь, решил,что лучше всю трассу проехать с одинаковой скоростью.В результате оба брата финишировали одновременно. Необходимо, зная скорость Ральфа Шумахера на каждом участке трассы определить, с какой скоростью трассу прошел Михаэль.
Формат входных данных: в первой строке входного файла задано целое число N- количество участков трассы,на границах которых менял скорость Ральф.(1<=N<=100000)
во второй строке через пробел записаны целые числа Vi(i=1..N),каждое из которых соответствует скорости болида Ральфа на i-ом участке.
Формат выходных данных: в выходной файл наша программа должна вывести одно число-скорость болида Михаэля в этой гонке с точностью до четырех знаков после десятичной точки.
имя входного файла:input.txt, имя выходного: output.txt/
Леди, ну, это даже не смешно. В чем проблема то? Есть трасса из нескольких фрагментов. Длину каждого принимаем за 1. Время прохождения: расстояние, деленное на скорость для данного участка. Суммируем время. В конце делим расстояние (количество участков, так как принимали длину каждого за 1) на получившееся в сумме время и получаем скорость второго. Чистая математика уровня 6го класса. Что касается программной части, то цикл for вы наверняка уже проходили, для разделения входной строки по пробелу служит метод split и первый же запрос в гугле "c++ split string" выдаст уйму решений на любой вкус. Не знаете английского? Не беда "c++ разделить строку" выдаст все те же 10+ страниц результатов. Чтение\запись в файл должна была уже проходиться и не раз. Если нет - опять же запрос в гугле "с++ чтение запись файла" выдаст уйму готовых решений.
Вам остается лишь собрать и проглотить. Пережевали уже все за вас и не раз. ;)
А может, вы хоть какое-то усилие приложите?
бан. пока на семь дней
нужно сделать чтобы конструктор Matrix() (по умолчанию) заполнял матрицу нулями. матрица должна содержать строки (char*).
const int p=2,q=3;
Matrix<char*,p,q> m1; //вот так объявляю
как переделать конструктор?
class Matrix {
T mat[M][N];
public:
int z;
Matrix(){
for (int i=0;i<M;i++) {
for (int j=0;j<N;j++) {
mat[j]=0;
}
}
};
. . .
class Matrix {
T mat[M][N];
public:
int z;
Matrix(){
for (int i=0;i<M;i++) {
for (int j=0;j<N;j++) {
mat[j]=new char[2];
mat[j][0]='0';
mat[j][1]=0;
}
}
};
Потому что у тебя строки. В Си каноническая строка из char'ов - это просто указатель на ее начало в памяти. У нее нет длины и единственный признак ее конца - терминирующий ноль. Поэтому вначале записывается символ '0' - его ANSI-код 30, затем символ с кодом 0, визуального представления он не имеет. Просто сообщает, что строка здесь закончилась и большинство методов работы со строками воспримут это как конец строки.
По второму - у тебя же матрица. Тоесть двумерный массив. А ты указываешь индекс первого измерения. Соответственно возвращается тебе все второе измерение в количестве. И почему ты в случае если индекс больше M возвращаешь mat[1]? Первым рядом будет mat[0] - это раз, и два: если M == 0, то и его в матрице не будет.
Но если хочется поизвращаться, то выглядеть это будет наверное так:
return (index1 < M) ? ((index2 < N) ? mat[index1][index2] : mat[index1][0]) : ((index2 < N) ? mat[0][index2] : mat[0][0]);
}
Я не сишник, могу ошибаться.
Столкнулся с непонятной проблемой.
Есть функция, простейшая впринципе:
int& hit_in_the_interval(vector<double>& numb, double& a, double& b)
{
int nu=0;
for(vector<double>::iterator iter =numb.begin(); iter!=numb.end();iter++)
{
if ( (*iter>=a) && (*iter)<=b ) nu++;
}
return nu;
}
Суть проблемы: если (*iter)==a то nu++, но если то же самое для b, то есть (*iter)==b, то ничего к nu не добавляется.
Кто-нибудь сталкивался с такой проблемой?
Проблема решилась с помощью округления:
int(b*100 + 0.5)/100.0
Видимо где-то разряды левые были.
class Matrix {
T mat[M][N];
public:
Matrix(){
for (int i=0;i<M;i++) {
for (int j=0;j<N;j++) {
mat[j]=new char[2];
mat[j][0]='0';
mat[j][1]=0;
}
}
};
.....................................
как это сделать? какую-то функцию надо вызывать в конструкторе? или как
Аха, чёт я в прошлый раз просмотрел - у тебя ж шаблон - тут явно определять значения для разных типов в конструкторе не получится.
В основном тебе надо понять чем указатель (char*,int* ...) отличается от типа (char,int ...), тогда все вопросы отпадут. В нете инфы более чем.
http://lib.ru/CPPHB/cpptut.txt
С++ и php схожи, наверное, лишь в одном - и тот и другой ООП. Первый в большей степени, второй в меньшей. На этом сходства кончаются. Тем не менее, если ты действительно хорошо освоил php во всех его тонкостях - нет, не сложно. Вопросы возникнут лишь по адресации (указатели) и синтаксическим конструкциям аля
for (int i = 0; i <= length; i++) p = q;
Так что дерзай и не думай о трудностях! Они будут, но ты их одолеешь!
Я начала писать примерный код программы:
Класс Base должен содержать не менее 2 полей и не менее 2 методов. Создать перечисленные классы как производные для базового класса (Base) с различным уровнем доступа, переопределить в них 1 метод базового класса. Объявить и описать собственные методы в производных классах. Продемонстрировать работу классов.
(студент, преподаватель, заведующий кафедрой.)
using namespace std;
class student
{
public:
student(){cout<<"конструктор student\n";}
~student(){cout<<"деструктор student\n";}
};
class teacher
{
public:
teacher(){cout<<"конструктор teacher\n";}
~teacher(){cout<<"деструктор teacher\n";}
};
class head
{
public:
head(){cout<<"конструктор head\n";}
~head(){cout<<"деструктор head\n";}
};
class base
{
public:
base(){}
~base(){}
string getSurname();
string getName();
void setSurname(string value);
void setName(string value);
private:
string name;
string surname;
};
Можно узнать,правильны ли я начала???
А так - да, верно, только реализовать методы
string getName();
void setSurname(string value);
void setName(string value);
не забудь. А то так и оставишь заглушками.
using namespace std;
class Base
{
public:
Base(){}
~Base(){}
string getSurname();
string getName();
void setSurname(string value);
void setName(string value);
private:
string name;
string surname;
};
class Student:public Base
{
public:
Student(){cout<<"конструктор Student\n";}
~Student(){cout<<"деструктор Student\n";}
};
class Teacher:protected Base
{
public:
Teacher(){cout<<"конструктор Teacher\n";}
~Teacher(){cout<<"деструктор Teacher\n";}
};
class Head:private Base
{
public:
Head(){cout<<"конструктор Head\n";}
~Head(){cout<<"деструктор Head\n";}
};
написать полезный код, н.п:
{
name = value; // пальцем в небо, не видел в С++ string, не знаю как они у вас задаются и что из себя представляют
}
А что касается переопределения, то ты же уже переопределяла операторы. Я в С++ не силен, может, кто поправит, но, кажется, достаточно определить метод с тем же именем и набором параметров в дочернем классе. Возможно, еще добавить слово virtual перед определением метода в базовом классе.
Еще вызывают сомнения protected Base, private Base также плохо себе представляю как это безобразие работает, но, вероятно, для всех классов оно должно быть одинаковым (и мое мнение - private, дабы позаимствовать все поля, но опять же могу ошибаться).
Программа получает два числа Между 999.00 и 100.00 .
В целой части каждого числа она проверяет совпадение между ними .
Например 423.567 и 728:Есть совпадение в десятках
или 423.567 и 623 :Есть совпадение в десятках и еденицах .
Или она пишет - совпадений в целой части чисел НеТ
Бьюсь челом о монитор уже , не понимаю что не так .....
Начал с вычленения целого числа
#include <stdio.h>
void main()
{
int repeat=1;
int num1,num2,num3;
int temp,tmp=1,mull=1;
int newnumber=0;
double numa=0,numb=0;
double tempa=0,tempb=0;
double shaarita,shaaritb;
int i=0;
int counta=0,countb=0;
do
{
printf("Enter 2 diferent decimal numbers between 100.00 to 999.00 \n");
scanf("%lf%lf",&tempa,&tempb);
if(!(tempa<999.00 && tempa>100.00 && tempb<999.00 && tempb>100.00))
{
printf("Wrong number, try again! \n");
}
}
while(!(tempa<999.00 && tempa>100.00 && tempb<999.00 && tempb>100.00));
printf("%lf%lf \n",tempa , tempb);
do {
[COLOR="red"]shaarita=tempa%10;[/COLOR](тут выдаёт ошибку
tempa*=10;
counta++t operand has type 'double'
}
Спасибо за внимание....
Через приведение типов или методы округления.
Немогли бы вы обьяснить чуть подробнее , я реально прошол 4 урока по с# ....
Я уже 4 часа сижу нал задачей ...=(
Спасибо .
Я уже 4 часа сижу нал задачей ...=(
Спасибо .
Так! Давай вначале определимся - какой язык тебя интересует. Твой код был на С++. Сейчас ты говоришь о C#. Так что же?
В случае с C# приведение типов выглядит так:
double a = 1.0;
int b = (int)a;
Примерно тоже самое сделает и следующий метод:
int b = Convert.ToInt32(a);
А что до округления, то:
int b = Math.Round(a); // округление до ближайшего
или
int b = Math.Floor(b); // округление вниз
В С++ в общем-то примерно также (приведение, кажется, и вовсе один в один) с той лишь разницей, что Round и Floor у вас зовутся, вероятно, иначе и лежат где-нибудь в другом месте. :)
На будущее - всегда указывай язык программирования.
Я переписала код программы про наследование:
using namespace std;
class Base
{
protected:
char * name;
char * surname;
int age;
public:
Base()
{
name=NULL;
surname=NULL;
age-0;
}
~Base(){}
void Print(){}
void Input(){};
};
class Student:public Base
{
private:
int coorse,group;
int rate;
public: Student()
{
coorse=0;
group=0;
rate=0;
}
~Student()
{
delete name;
delete surname;
}
void Print()
{
cout<<name<<","<<surname<<","<<age<<","<<coorse<<","<<group<<","<<rate<<endl;
}
void Input()
{
cout<<"Введите имя студента "<<endl;
cin>>name;
cout<<"Введите фамилию студента "<<endl;
cin>>surname;
cout<<"Введите возраст студента "<<endl;
cin>>age;
cout<<"Введите курс студента"<<endl;
cin>>coorse;
cout<<"Введите группу студента"<<endl;
cin>>group;
cout<<"Введите группу студента"<<endl;
cin>>group;
cout<<"Введите рейтинг студента"<<endl;
cin>>rate;
}
};
class Teacher:public Base
{
char*post;
float salary;
public:
Teacher()
{
post=NULL;
salary=0;
}
~Teacher()
{
delete name;
delete surname;
delete post;
}
void Print()
{
cout<<name<<","<<surname<<","<<age<<","<<post<<","<<salary<<endl;
}
void Input()
{
cout<<"Введите имя преподавателя "<<endl;
cin>>name;
cout<<"Введите фамилию преподавателя "<<endl;
cin>>surname;
cout<<"Введите возраст преподавателя "<<endl;
cin>>age;
cout<<"Введите должность преподавателя "<<endl;
cin>>post;
cout<<"Введите зарплату преподавателя"<<endl;
cin>>salary;
};
class Head:public Base
{
char*chair;
public:
Head()
{
chair=NULL;
}
void Print()
{
cout<<name<<","<<surname<<","<<age<<","<<chair<<endl;
}
void Input()
{
cout<<"Введите имя заведующего кафедрой "<<endl;
cin>>name;
cout<<"Введите фамилию заведующего кафедрой "<<endl;
cin>>surname;
cout<<"Введите возраст заведующего кафедрой "<<endl;
cin>>age;
cout<<"Введите кафедру заведующего "<<endl;
cin>>chair;
{
delete name;
delete surname;
delete chair;
}
};
void main()
Только теперь не знаю что описывать в главной функции..
В случае с C# приведение типов выглядит так:
double a = 1.0;
int b = (int)a;
Примерно тоже самое сделает и следующий метод:
int b = Convert.ToInt32(a);
А что до округления, то:
int b = Math.Round(a); // округление до ближайшего
или
int b = Math.Floor(b); // округление вниз
В С++ в общем-то примерно также (приведение, кажется, и вовсе один в один) с той лишь разницей, что Round и Floor у вас зовутся, вероятно, иначе и лежат где-нибудь в другом месте. :)
На будущее - всегда указывай язык программирования.
Спасибо!!!!!!!!!!!!!!!!!!!!!:cool:
Сделал так :
float b; scanf("%f",b);
int a;
a=(int)b;
Создал такой класс для манипуляций с вавками:
class FloatWaveFile
{
public:
BYTE ChunkId[4];
DWORD ChunkSize;
BYTE Format[4];
BYTE Subchunk1ID[4];
DWORD Subchunk1Size;
short AudioFormat;
short NumChannels;
DWORD SampleRate;
DWORD ByteRate;
short BlockAlign;
short BitsPerSample;
BYTE Subchunk2ID[4];
DWORD Subchunk2Size;
float *Data;
};
out.Data=(float*)calloc((imp.Subchunk2Size+in.Subchunk2Size)/2,sizeof(float));
{....Тут идут вычисления...}
void __fastcall TForm1::Button6Click(TObject *Sender)
//заполняем заголовок будущего файла
{
out.ChunkId[0]='R'; out.ChunkId[1]='I'; out.ChunkId[2]='F'; out.ChunkId[3]='F';
out.ChunkSize=(36 + (in.Subchunk2Size+imp.Subchunk2Size)*2);
out.Format[0]='W'; out.Format[1]='A'; out.Format[2]='V'; out.Format[3]='E';
out.Subchunk1ID[0]='f'; out.Subchunk1ID[1]='m'; out.Subchunk1ID[2]='t'; out.Subchunk1ID[3]=' ';
out.Subchunk1Size=16;
out.AudioFormat=1;
out.NumChannels=1;
out.SampleRate=44100;
out.BitsPerSample=32;
out.ByteRate=out.SampleRate * out.NumChannels * out.BitsPerSample/8;
out.BlockAlign=out.NumChannels * out.BitsPerSample/8;
out.Subchunk2ID[0]='d'; out.Subchunk2ID[1]='a'; out.Subchunk2ID[2]='t'; out.Subchunk2ID[3]='a';
out.Subchunk2Size=(in.Subchunk2Size+imp.Subchunk2Size)*2;
outptr = fopen("C:/conv_out.wav","wb");
fwrite(&out,sizeof(out),1,outptr);
fclose(outptr);
ShowMessage("File saved");
}
Причем заголовок записывается правильно - файл распознается винампом и видны параметры. Но данных нет. Массив *Data на момент записи у меня точно заполнен, т.к. я вывожу его на чарт в программе и вижу содержимое.
ХЕЛП!
1) Используй тег CODE.
2) А что у тебя должно было туда записаться? 4 байта? Их физичкски в файле нет? Что за "массив *Data"? У тебя там указатель на float. Никакого массива я вот не наблюдаю. А если уж там должен быть массив, то sizeof(out) не станет вычислять длину динамического массива.
Настен
В соответствии с заданием. Что надо? Продемонстрировать работу? Ну вот и создай экземпляры учащегося, учителя и зав.кафедры. Воспользуйся унаследованными методами. Продемонстрируй что какие-то из них переопределены (делают не одно и тоже).
1) Ок.
2) Должен записываться массив float-ов, находящихся по адресу out.*Data. По крайней мере, такова задумка) А 4 байта и записываются, будь они неладны, не считая заголовка. Всего записывается 48 байт.
А как мне правильно записать такой массив? Задать его размер константой не могу, т.к. он формируется в программе из результатов вычислений.
Ну так в вычислениях и запоминаё его размер или сразу в файл пиши.
fwrite(out.Data,sizeof(float),(in.Subchunk2Size+imp.Subchunk2Size)/2,outptr);
fclose(outptr);
Хоть и извращенно, но записывается)
Далее возник еще один трабл - аудио данные сильно искажены. В аудио-редакторе значения сильно зашкаливают за 0 дБ, хотя значения семплов находятся в пределах 10^6. Это вроде как влазит в 32-х битный float. И самое непонятное для меня - если сделать нормализацию, данные восстанавливаются. Тоесть, переполнения нет и данные не потеряны. Я правильно понимаю?
Вопросы стандартные: Кто виноват и что делать?))
upd
Допер, в чем дело...не нравится ей тип float. С int все ок. Можно что-то сделать чтоб с флоатом читалось по человечески?
Дело в том, что без ввода доп. коэффициента в алгоритм свертки результат имеет значения (при 16-ти битных входных файлах), выходящие за пределы int. Если, делая свертку, попутно домножать на какой-то 0.0001, это сильно увеличивает время вычисления. Не подходит. Уменьшение входных значений ведет к потере точности - тоже не катит.
Есть какой-то выход?
Есть какой-то выход?
Нормализация
Не знаю, что под этим имеете ввиду вы, но я уже решил проблему домножением на 0.1 во внешнем цикле (вычисление идет во флоутах без доп. действий, поэтому на скорость не влияет) и после этого переводом в инт.
А вы что имели ввиду под нормализацией?
Не знаю, что под этим имеете ввиду вы, но я уже решил проблему домножением на 0.1 во внешнем цикле (вычисление идет во флоутах без доп. действий, поэтому на скорость не влияет) и после этого переводом в инт.
А вы что имели ввиду под нормализацией?
Ммм... я в глаза не видел спецификации по WAV-файлу, но меня очень настораживают эти ваши динамические данные... если больше ничего не меняется, то с чего ты взял, что проигрыватель будет разбираться - float у тебя там или int? Он просто сожрет 4 байта и будет считать их int'ом смешав в кучу и мантиссу и порядок. Проверь все же спецификацию по wav-файлам - что там должно быть. float или int.
есть текстбоксы, которые показывают значения, основываясь на формулах из длл
например
textBoxtop.Text = Math.Round(Hc.Gettop(Hc._ttn, Hc._tp), 1).ToString();
очищается текстбокс такой строчкой
Hc.Settop(Convert.ToDouble(textBoxtop.Text));
проблема в том, что после запуска расчетов заного, она не очищает текстбокс, а вылетает с ошибкой
потому что в текст боксе дробное значение, а она работает только с целочисленными
вот полный код кнопки для расчета
#region Кнопка "Расчитать"
private void btnRas4_Click(object sender, EventArgs e)
{
// Запустить процедуру расчета
RunSolver();
}
private void DataRefresh()
{
Hc.Setttn(Convert.ToDouble(textBoxttn.Text));
Hc.Settp(Convert.ToDouble(textBoxtp.Text));
Hc.SetL(Convert.ToDouble(textBoxL.Text));
//Hc.Settop(Convert.ToDouble(textBoxtop.Text));
//Hc.SetKV(Convert.ToDouble(textBoxKV.Text));
//Hc.SetKT(Convert.ToDouble(textBoxKT.Text));
//Hc.SetPr(Convert.ToDouble(textBoxPr.Text));
//Hc.SetGr(Convert.ToDouble(textBoxGr.Text));
//Hc.SetRa(Convert.ToDouble(textBoxRa.Text));
//Hc.SetNu(Convert.ToDouble(textBoxNu.Text));
//Hc.Seta(Convert.ToDouble(textBoxa.Text));
}
private void RunSolver()
{
if (FFlag) DataRefresh();
MessageBoxButtons buttons = MessageBoxButtons.OK;
MessageBox.Show("Расчет успешно завершен", " ", buttons, MessageBoxIcon.Information);
if (Hc.GetL() <= 0)
{
MessageBox.Show("Определяющий размер не может быть меньше 0, измените условия задачи");
return;
}
textBoxtop.Text = Math.Round(Hc.Gettop(Hc._ttn, Hc._tp), 1).ToString();
//textBoxtop.Text = Convert.ToString(Math.Round((double)Hc.Gettop(Hc._ttn, Hc._tp), 1).ToString());
textBoxKV.Text = Math.Round(Hc.GetKV(Hc._top), 10).ToString();
textBoxKT.Text = Math.Round(Hc.GetKT(Hc._top), 10).ToString();
textBoxPr.Text = Math.Round(Hc.GetPr(Hc._top), 10).ToString();
textBoxGr.Text = Math.Round(Hc.GetGr(Hc._KV, Hc._L, Hc._ttn, Hc._tp), 0).ToString();
//textBoxRa.Text = Math.Round(Hc.GetRa(Hc._Gr(Hc._KV, Hc._L, Hc._ttn, Hc._tp), Hc._Pr(Hc._top), 0)).ToString();
//textBoxNu.Text=Convert.ToString(Math.Round((double)
//textBoxa.Text = Math.Round(Hc.Geta(Hc._Nu, Hc._KT, Hc._L), 1).ToString();
btnOt4.Enabled = true;
отчетToolStripMenuItem.Enabled = true;
}
#endregion
подскажите, что нужно изменить ?
вот такой код:
#include "stdafx.h"
#include <iostream>
using namespace std;
class Cat
{
public:
Cat();
~Cat();
int GetX(){return *X;}
void SetX(int x)
{
*X=x;
}
private:
int *X;
};
Cat::Cat()
{
int *X= new int;
}
Cat::~Cat(){delete X;}
int _tmain(int argc, _TCHAR* argv[])
{
Cat *Polly= new Cat;
Polly->SetX(6);
cout<<Polly->GetX();
system("pause");
return 0;
}
создаем класс кот, создаем объект данного класса место для хранения которого выделяется в области динамической памяти, присваиваем скрытому указателю значение 6, и в результате у меня я так понял значение 6 присваивается не переменной, а самому адресу указателя. Я все делал так как писалось в учебнике. В чем моя ошибка???!!!