Консультация № 178624
25.05.2010, 14:06
42.84 руб.
0 4 1
Здравствуйте.Помогите пожалуйста написать программу на CodeGear builder 2009 на тему наследование и виртуальные функции .

Задание:
написать программу, в которой создается иерархия классов(тест,экзамен,выпускной экзамен,испытание). Определить абстрактный класс. Определить в классе статическую компоненту – указатель на начало связанного списка объектов и статическую функцию для просмотра списка. Определить в классах все необходимые конструкторы и деструктор. Реализовать классы. Включить полиморфные объекты в связанный список, используя статические компоненты класса. Показать использование виртуальных функций. Список просматривать путем вызова виртуального метода Show каждого объекта. Статический метод просмотра списка вызывать не через объект, а через класс.

Приложение:
#include <stdio.h>

#define EKZAMENZ "Ekzamen"
#define VIPUSKEKZAMENZ "VipuskEkzamen"
#define ISPITANIEZ "ispitanie"


#include <iostream>
#include <cstdlib>

static int count=0;

class test
{
public:
char *name1;
int data1;
int result1;
static test *beg;
test* next;

test();
test(char *name,int data,int result);
test(const test&);
~test(){};
static void showlist();
void addtolist();
char* getname();
virtual int getdata()=0;
int getresult() const;
void setname(char*);
virtual void setdata(int);
void setresult(int);
virtual void setall(char*,int,int);
void show();
};

class ekzamen:public test
{
public:
ekzamen(){name1="ekzamen";};
ekzamen(char* name, int result){
name1=name;
data1=5;
result1=result;
};
ekzamen(const ekzamen&);
~ekzamen(){};
int getdata();
void setdata();
void setall(char*,int);
};

class vipuskekzamen:public test
{
public:
vipuskekzamen(){name1="vipuskekzamen";};
vipuskekzamen(char* name, int result){
name1=name;
data1=4;
result1=result;
};
vipuskekzamen(const vipuskekzamen&);
~vipuskekzamen(){};
int getdata();
void setdata();
void setall(char*,int);
};

class ispitanie:public test
{
public:
ispitanie(){name1="ispitanie";};
ispitanie(char* name, int result){
name1=name;
data1=6;
result1=result;
};
ispitanie(const ispitanie&);
~ispitanie(){};
int getdata();
void setdata();
void setall(char*,int);
};

extern test *p;
extern ekzamen *p2;
extern vipuskekzamen *p3;
extern ispitanie *p4;




test::test()
{
name1="\0";
data1=0;
result1=0;
addtolist();
};
test::test(char *name,int data,int result)
{
name1=name;
data1=data;
result1=result;
addtolist();
};
test::test(const test& sec)
{
name1=sec.name1;
data1=sec.data1;
result1=sec.result1;
};

void test::showlist()
{
char i;
test *tmp=test::beg;
printf("count=%d\n",count);
for(i=0;i<count;i++)
{
tmp->show();
tmp=tmp->next;
}
};

void test::addtolist()
{
this->next=beg;
beg=this;
count++;
};

char* test::getname()
{
return name1;
}

int test::getdata()
{
return data1;
}

int test::getresult() const
{
return result1;
}

void test::setname(char* nm)
{
name1=nm;
}

void test::setdata(int dat)
{
data1=dat;
}

void test::setresult(int res)
{
result1=res;
}

void test::setall(char* nm, int dat, int res)
{
name1=nm;
data1=dat;
result1=res;
}

void test::show()
{
printf("Name: %s ; data: %s ; result: %d\n",name1,data1,result1);
}

int ekzamen::getdata()
{
return ekzamen;
}

void ekzamen::setdata()
{
data1=ekzamen;
}

void ekzamen::setall(char* nm,int res)
{
name1=nm;
//data1=dat;
result1=res;
}

/*char* vipuskekzamen::getdata()
{
return vipuskekzamen;
}

void vipuskekzamens::setdata()
{
data1=vipuskekzamen;
}*/

void vipuskekzamen::setall(char* nm,int res)
{
name1=nm;
//data1=vipuskekzamen;
result1=res;
}

/*char* ispitanie::getdata()
{
return ispitanie;
}*/

void ispitanie::setdata()
{
//data1=vipuskekzamen;
}

void ispitanie::setall(char* nm,int res)
{
name1=nm;
// data1=vipuskekzamen;
result1=res;
}
test * test::beg=0;

int main(int argc, char** argv)
{
ekzamen lol("people1",4);
//vipuskekzamen pigs[2]={vekzamen("people2",5),vekzamen("People3",4)};
//vekzamen *opo;
//opo=new vekzamen;
//opo->setall("Opossum",7);
test::showlist();
printf("========================================================= \n");
printf("construct bez parametrov: \n");
printf("name1: \n");
printf("data1: \n");
printf("result1: \n");

system("pause");
}

Обсуждение

давно
Профессор
230118
3054
27.05.2010, 14:01
общий
novij2011:
Вы пишете иерархию объектов, не подумав, чем один тип будет отличаться от другого. Какие новые члены добавляются в экзамен по сравнению с тестом?
давно
Профессор
230118
3054
27.05.2010, 14:57
общий
это ответ
Здравствуйте, novij2011.

В таком виде программа уже работает:

Приложение:
#include <stdio.h>

#define EKZAMENZ "Ekzamen"
#define VIPUSKEKZAMENZ "VipuskEkzamen"
#define ISPITANIEZ "ispitanie"


#include <iostream>
#include <cstdlib>

static int count=0;

class test
{
public:
char *name1;
int data1;
int result1;
static test *beg;
test* next;

test();
test(char *name, int data, int result);
test(const test&);
~test(){};
static void showlist();
void addtolist();
char* getname();
virtual int getdata();
int getresult() const;
void setname(char*);
virtual void setdata(int);
void setresult(int);
virtual void setall(char*,int,int);
virtual void show()=0;
};

class ekzamen:public test
{
public:
ekzamen(){name1="ekzamen";};
ekzamen(char* name, int result);
ekzamen(const ekzamen&);
~ekzamen(){};
void setall(char*,int);
virtual void show();
};

class vipuskekzamen:public test
{
public:
vipuskekzamen(){name1="vipuskekzamen";};
vipuskekzamen(char* name, int result){
name1=name;
data1=4;
result1=result;
};
vipuskekzamen(const vipuskekzamen&);
~vipuskekzamen(){};
int getdata();
void setdata();
void setall(char*,int);
virtual void show();
};

class ispitanie:public test
{
public:
ispitanie(){name1="ispitanie";};
ispitanie(char* name, int result){
name1=name;
data1=6;
result1=result;
};
ispitanie(const ispitanie&);
~ispitanie(){};
int getdata();
void setdata();
void setall(char*,int);
virtual void show();
};

extern test *p;
extern ekzamen *p2;
extern vipuskekzamen *p3;
extern ispitanie *p4;

test::test()
{
name1="\0";
data1=0;
result1=0;
addtolist();
};

test::test(char *name,int data,int result)
{
name1=name;
data1=data;
result1=result;
addtolist();
};

test::test(const test& sec)
{
name1=sec.name1;
data1=sec.data1;
result1=sec.result1;
};

void test::showlist()
{
char i;
test *tmp=test::beg;
printf("count=%d\n",count);
for(i=0;i<count;i++)
{
tmp->show();
tmp=tmp->next;
}
};

void test::addtolist()
{
this->next=beg;
beg=this;
count++;
};

char* test::getname()
{
return name1;
}

void test::setname(char* nm)
{
name1=nm;
}

int test::getdata()
{
return data1;
}

void test::setdata(int dat)
{
data1=dat;
}

int test::getresult() const
{
return result1;
}

void test::setresult(int res)
{
result1=res;
}

void test::setall(char* nm, int dat, int res)
{
name1=nm;
data1=dat;
result1=res;
}

ekzamen::ekzamen(char* name, int result)
{
printf("constructor exzamen");
name1=name;
data1=5;
result1=result;
};

void ekzamen::show()
{
printf("Examen: Name: %s ; data: %d ; result: %d\n",name1,data1,result1);
}

/*int ekzamen::getdata()
{
return data1;
}

void ekzamen::setdata(int data)
{
data1=data;
}

void ekzamen::setall(char* nm,int res)
{
name1=nm;
//data1=dat;
result1=res;
}

char* vipuskekzamen::getdata()
{
return vipuskekzamen;
}

void vipuskekzamens::setdata()
{
data1=vipuskekzamen;
}

void vipuskekzamen::setall(char* nm,int res)
{
name1=nm;
//data1=vipuskekzamen;
result1=res;
}
*/
/*char* ispitanie::getdata()
{
return ispitanie;
}*/

void vipuskekzamen::show()
{
printf("Vypusk examen: Name: %s ; data: %d ; result: %d\n",name1,data1,result1);
}

void ispitanie::show()
{
printf("Ispitanie: Name: %s ; data: %d ; result: %d\n",name1,data1,result1);
}

//void ispitanie::setdata()
//{
// //data1=vipuskekzamen;
//}

//void ispitanie::setall(char* nm,int res)
//{
// name1=nm;
// // data1=vipuskekzamen;
// result1=res;
//}

test * test::beg=0;

int main(int argc, char** argv)
{
ekzamen lol("people1",4);
//vipuskekzamen pigs[2]={vekzamen("people2",5),vekzamen("People3",4)};
//vekzamen *opo;
//opo=new vekzamen;
//opo->setall("Opossum",7);
test::showlist();
printf("========================================================= \n");
printf("construct bez parametrov: \n");
printf("name1: \n");
printf("data1: \n");
printf("result1: \n");

system("pause");
}
Неизвестный
27.05.2010, 15:08
общий
имя,дата,результат
давно
Профессор
230118
3054
27.05.2010, 15:47
общий
novij2011:
В программе все это заложено уже в тест.
Форма ответа