IvaSerbia Ответов: 4

Может ли кто-нибудь подробно объяснить мне коды thoose шаг за шагом.


1.
#ifndef T_HPP_INCLUDED
#define T_HPP_INCLUDED
#include <iostream>
using namespace std;
#include <math.h>
class T{
public:
        static int t;
        T(){++t;}
};

class S:public T{
public:
        static int s;
        S(){++s;}
        ~S(){s++;}
        S test(){
        S ss;
        return ss;
        }
};

int T::t=pow(2,2);
int S::s=sqrt(16);
int main()
{
    T t1;
    S s1,s2,s3;
    s2.test();
    cout<<S::s<<T::t;
    return 0;
}
2.
#ifndef A_HPP_INCLUDED
#define A_HPP_INCLUDED
#include <iostream>
using namespace std;
template<int vred,class tip<
class KlasaA{
private:
    tip i;
    tip j;
public:
    KlasaA(){i=vred; j=vred;}
};
int main()
{
    KlasaA<-2,double>gen1(0,1);
    KlasaA<3,int>gen2;
    return 0;
}
3.
#ifndef B_HPP_INCLUDED
#define B_HPP_INCLUDED
#include <iostream>
using namespace std;

class B:public A{
public:
    void p(){cout<<"A";}
};
void f(A& ra){
    ra.p();
}
int main()
{
   B b;
   b.p();
   f(b);
    return 0;
}

#endif // B_HPP_INCLUDED
4.
#ifndef A_HPP_INCLUDED
#define A_HPP_INCLUDED
#include <iostream>
using namespace std;
class A{
public:
    A(){cout<<"1";}
    virtual void show(){cout<<"2";}
};

class Q:public A
{
public:
    Q(){cout<<"3";}
    void show(){cout<<"4";}
    ~Q(){cout<<"5";}
};

int main()
{
    A a;
    Q q;
    A *pokA;
    a.show();
    pokA=&q;
    pokA->show();
    return 0;
}
#endif // A_HPP_INCLUDED
5.
class A
{
private:
	int a,b;
public:
	A(){a=1; b=2;}
	A(int aa=1,int bb=2){a=aa; b=bb;}
	A(const A& aa){a=aa.a; b=aa.b;}
	void ispis(){
		cout<<++a<<b++;
	}
};

int main()
{
	A a,a2(3,4),a3(a2);
	a.ispisi();
	a2.ispisi();
	a3.ispisi();
}
6. Это с#
public static void Main(string[]args)
{
	A a1,a2,a3,a4;
	a1=new A(1);
	a2=new A(2);
	a3=new A(3);
	a4=new A(4);
	a2=a1;
	a3=a2;
	List<a>list=new List</a><a>();
	list.Add(a1);
	list.Add(a2);
	list.Add(a3);
	list.Add(a4);
	a1=a4;
	foreach(A a in list){
		Console.Write(a.a);
        }
}


Что я уже пробовал:

Я знаю,что могу поместить код в блоки кода и построить его, но я не понимаю результатов.

Dave Kreskowiak

Нет. Это кричит "домашнее задание", и мы не в том бизнесе, чтобы делать вашу работу за вас.

IvaSerbia

Делаю домашнее задание? - Брат, как я уже сказал, я могу поместить код в Кодовые блоки и получить результаты. Проблема в том, что я не понимаю, почему некоторые цифры являются результатами моего кода. Если вы сердитесь,Оставьте мой пост.

Mohibur Rashid

Вы не в состоянии сказать, кто будет отвечать/комментировать ваш пост, а кто нет.

Stefan_Lang

Затем расскажите нам, какие цифры вы получаете и почему вы думаете, что это должно быть по-другому. Это многое нам расскажет о том, чего именно вы не понимаете. Не имея по крайней мере такого количества информации, наши объяснения могли бы также начаться с основ машин Тьюринга.

David O'Neil

Какой результат вы не понимаете?

IvaSerbia

Например,в 1. queston я знаю, что результат равен 99,но как?? Эти коды были у меня на экзаменационных вопросах, и они спросили нас, что будет написано. Мы не можем использовать какую - либо программу, у нас просто есть этот код и вопрос-что будет написано в конце. Вот почему я прошу кого-то объяснить мне шаг за шагом или дать мне какой-то совет, как это понять.
Извините за мой плохой английский.

Rick York

По-моему, вам следует задавать эти вопросы по одному. Кроме того, вы должны задавать конкретные вопросы. Я бы сохранил шаблоны (2) и ссылки (3,5) на потом. 1 и 4-это просто базовый C++ с плохо названными членами и методами, но это то, с чего вы должны начать.

Stefan_Lang

Для вас неразумно просить объяснения по строкам, не имея никакой информации о том, что вы знаете и понимаете, А что нет. Это раздел ответов _quick_, поэтому вы должны задавать только очень конкретные вопросы, на которые можно ответить в течение нескольких минут/абзацев!

4 Ответов

Рейтинг:
2

OriginalGriff

Вы хоть представляете, как много работы по построчному объяснению кода?
Каждая строка нуждается в пояснении! Например:

int next = r.Next();

Создайте новую переменную под названием "next", которая может содержать целочисленное значение. Из ранее объявленного случайного экземпляра "r" вызовите метод "Next", чтобы получить новое случайное число, и назначьте его переменной "next".

Можете себе представить, сколько времени нам потребуется, чтобы объяснить даже такой очень короткий фрагмент кода, как ваш пример, строка за строкой?

Нет, этого не произойдет. Если у вас есть конкретная проблема, то задайте вопрос о ней. Но сначала подумайте - хотите ли вы сесть на 45 минут и напечатать построчное описание без веской причины?


Рейтинг:
2

Stefan_Lang

Не пытаясь на самом деле компилировать, а просто глядя на этот код, вот что я могу сказать о нем с первого взгляда:

Код 1-это все о том, чтобы знать, когда вызывается конструктор или деструктор. Статические переменные T::t и S::s просто подсчитывают эти вызовы (с небольшими вариациями). Если вы хотите понять, как и когда изменяются эти значения, просто поместите точки останова в каждую строку, где изменяются T::t и S::s, и проверяйте стек вызовов всякий раз, когда отладчик попадает в одну из этих точек. Подсказка: вы должны вставить несколько разрывов строк так, чтобы каждая инструкция была на отдельной строке! Это помогает устанавливать точки останова и знать, где на самом деле находится счетчик программы во время отладки.

Код 2 не компилируется и не выдает никаких выходных данных, даже если он исправлен. В чем же вопрос?

Код 3 также не компилируется: по крайней мере, он пропускает все объявление для класса A. Однако, если конструктор A тоже что - то не напечатает, он, вероятно, напечатает "AA" - но я вообще не знаю, какой аспект программирования на C++ должен быть протестирован здесь.

Код 4, по - видимому, представляет собой простую витрину для виртуального наследования, показывающую, когда и какая функция/конструктор/деструктор вызывается-он действительно должен быть немного более многословным, чем "3", "4", "5" хотя ... ..

Код 5 не должен компилироваться, если только компилятор не очень снисходителен, и его параметры настроены так, чтобы принимать "паршивый код". Если это так, то он может вывести что-то вроде "224444"; я говорю "Может", потому что не уверен в порядке оценки в строке, которая объявляет a, a2 и a3, и мне слишком лень искать его; -).

Код 6-Это C# и поэтому находится вне моей области знаний, но в нем, похоже, отсутствует декларация A.


Рейтинг:
2

KarstenK

Вам нужно выучить языки, чтобы понять его полностью. Но это несколько просто занятиякоторые кое-что делают. Самое сложное заключается в том, что некоторые шаблон класса предназначенный. Это немного похоже на текст, который расширяется до некоторого исходного кода Хью.

Я думаю, что некоторые ошибки есть в коде, и вы не должны полагаться на его качество. Не говори, что ты это написал ;-)


IvaSerbia

Эти коды были у меня на экзаменационных вопросах, и они спросили нас, что будет написано. Мы не можем использовать какую - либо программу, у нас просто есть этот код и вопрос-что будет написано в конце. Вот почему я прошу кого-то объяснить мне шаг за шагом или дать мне какой-то совет, как это понять.
Извините за мой плохой английский.

KarstenK

Загрузите Visual Studio и включите их в некоторые проекты. Вы должны разделить C++ и C# для простоты. Попробуйте и научитесь...

Рейтинг:
1

Patrice T

Цитата:
Может ли кто-нибудь подробно объяснить мне коды thoose шаг за шагом.

Почему бы не попросить ваш компьютер сделать это ?

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


IvaSerbia

Я хочу понять, как программа дала такие результаты. Могу ли я сделать это с помощью точек останова?
Извините за мой плохой английский..

Patrice T

Выполняйте свою программу шаг за шагом, отладчик будет показывать Вам изменения, сделанные каждый раз.

Stefan_Lang

Это, вероятно, лучший совет, который можно предложить, учитывая такой неопределенный вопрос. 5.

Patrice T

Спасибо.

BillWoodruff

+5 на месте !

Patrice T

Спасибо