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

Наследование, абстрактные классы. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Битовые операции http://www.cyberforum.ru/cpp-beginners/thread180853.html
Дали задание на побитовые логические операции и операции сдвига, а я в них ничего не понимаю. Помогите пожалуйста решить эти задачи, очень надо! Во вложенном файле 3.doc условие задач с примером выполнения. Вот условия задач: Задача 1: Составить две программы, первая из которых вводит составные части структуры данных, приведенной в Вашем варианте индивидуального задания, и формирует из...
C++ Решение шахматного вопроса Помогите с решением пожалйуста! На шахматной доске стоят белые короли. Вася хочет поставить на доску несколько черных фигур так, чтобы никакую из них короли не били (не стояли в клетках, граничащих хотя бы вершиной). Какое наибольшее количество фигур может поставить Вася? На вход подается в строке без разделителей список клеток, в которых стоят короли (в шахматной аннотации, используются... http://www.cyberforum.ru/cpp-beginners/thread180843.html
C++ командная строка
Здравствуйте! вопрос такой: как задать командную строку, чтобы отделить загружаемое приложение от параметров кавычками: "*.exe" nnn. т.е. как символ " записать в переменную. Делаю так '"' если он идет первым то выходит ошибка - например '"'+"exe"+'"'+" nnn" - если этот символ стоит не первым то вроде ошибки нет, но тогда командная строка без первых ковычек получается неправильной. Заранее спасибо
C++ Вставить в вектор новый элемент перед элементом с заданным индексом
Здравствуйте. У меня следующая проблема: Мне в программе нужно в вектор вставить в определенное место элемент. Лучше всего мне походит для этих целей естественно std::Vector::insert(). Но использовать ее не получается потому, что я не пойму каким образом я должен указать элемент перед котороым мне нужно сделать вставку. Код работает только если я указываю ...
C++ Найти все правильные идентификаторы Си в произвольном текстовом файле http://www.cyberforum.ru/cpp-beginners/thread180833.html
Программа, которая отыскивает и выводит на печать все правильные идентификаторы языка С в произвольном текстовом файле.
C++ Как вернуть массив Можно ли вернуть массив через возвращаемое значение? Если нет, то как можно сделать вывод массива в main? подробнее

Показать сообщение отдельно
Alukar
0 / 0 / 0
Регистрация: 12.09.2010
Сообщений: 6

Наследование, абстрактные классы. - C++

24.10.2010, 17:33. Просмотров 904. Ответов 4
Метки (Все метки)

Собственно нужно создать абстрактный базовый класс Shape, от него наследовать абстрактные классы Shape2D и Shape3D. От них конкретные классы для вычисления объёма и площади. Треугольник, прямоугольник круг в 2Д. Цилиндр, куб, сфера для 3Д.
пишу на вижуале 2008.

//Header1.h
Код
#include "stdafx.h"

class Shape   // базовый класс
{
public:
	virtual double getS()=0;
	virtual void Set()=0;
	virtual void print()=0;
};
class Shape2D: public Shape    // для 2Д фигур 
{

};
class rectangle: public Shape2D // прямоугольник
{
private:
	int a,b;
	double s;
public:
	rectangle(int=0,int=0);
	double getS();
	void Set(int,int);
	void print();
	~rectangle();
};
class circle: public Shape2D   // круг
{
private:
	int r;
	double s;
public:
	circle(int=0);
	double getS();
	void Set(int);
	void print();
	~circle();
};
class triangle: public Shape2D //треугольник
{ 
private:
	int a,b,c;
	double s;
public:
	triangle(int=0,int=0,int=0);
	double getS();
	void Set(int,int,int);
	void print();
	~triangle();
};
class Shape3D: public Shape  // для 3Д
{
public:
	//virtual void print()=0;
	virtual double getV()=0;
	//virtual double getS()=0;
	//virtual void Set()=0;
};
class cylinder: public Shape3D //цилиндр
{
private:
	int r,h;
	double s,v;
public:
	cylinder(int=0,int=0);
	double getV(); // получить объём
	double getS(); // получить прощадь
	void Set(int,int); // задать фигуру
	void print();
	~cylinder();
};
class cube: public Shape3D // куб
{
private:
	int a;
	double s,v;
public:
	cube(int=0);
	double getV(); // получить объём
	double getS(); // получить прощадь
	void Set(int);
	void print();
	~cube();
};
class sphere: public Shape3D // сфера
{
private:
	int r;
	double s,v;
public:
	sphere(int=0);
	double getV(); // получить объём
	double getS(); // получить прощадь
	void Set(int);
	void print();
	~sphere();
};
// source.cpp
Код
#include "stdafx.h"
#include "Header1.h"
#include <iostream>
#include "math.h"
using namespace std;

rectangle::rectangle(int va,int vb)
{
	a=va;
	b=vb;
	s=a*b;
}
double rectangle::getS()
{
	return s;
}
void rectangle::Set(int va,int vb)
{
	a=va;
	b=vb;
	s=a*b;
}
rectangle::~rectangle()
{
}
void rectangle::print()
{
	cout<<"a: "<<a<<endl<<"b: "<<b<<endl;
}

circle::circle(int vr)
{
	r=vr;
	s=3.14*r*r;
}
double circle::getS()
{
	return s;
}
void circle::Set(int vr)
{
	r=vr;
	s=3.14*r*r;
}
void circle::print()
{
	cout<<"R: "<<r<<endl;
}
circle::~circle()
{
}

triangle::triangle(int va, int vb, int vc)
{
	a=va;
	b=vb;
	c=vc;
	double p=(a+b+c)/2;
	s=sqrt(p*(p-a)*(p-b)*(p-c));
}
double triangle::getS()
{
	return s;
}
void triangle::print()
{
	cout<<"a: "<<a<<endl<<"b: "<<b<<endl<<"c: "<<c<<endl;
}
void triangle::Set(int va, int vb, int vc)
{
	a=va;
	b=vb;
	c=vc;
	double p=(a+b+c)/2;
	s=sqrt(p*(p-a)*(p-b)*(p-c));
}

triangle::~triangle()
{
}

cylinder::cylinder (int vr, int vh)
{
	r=vr;
	h=vh;
	s=2*(3.14*r*r)+6.28*r*h;
	v=3.14*r*r*h;
}

double cylinder::getS()
{
	return s;
}

double cylinder::getV()
{
	return v;
}

void cylinder::Set(int vr, int vh)
{
	r=vr;
	h=vh;
	s=2*(3.14*r*r)+6.28*r*h;
	v=3.14*r*r*h;
}

void cylinder::print()
{
	cout<<"r: "<<r<<endl<<"h: "<<h<<endl;
}

cube::cube (int va)
{
	a=va;
	s=6*a*a;
	v=a*a*a;
}

void cube::Set(int va)
{
	a=va;
	s=6*a*a;
	v=a*a*a;
}

double cube::getS()
{
	return s;
}

double cube::getV()
{
	return v;
}

void cube::print()
{
	cout<<"a: "<<a<<endl;
}

sphere::sphere (int vr)
{
	r=vr;
	s=4*3.14*r*r;
	v=(4*3.14*r*r*r)/3;
}

void sphere::Set(int vr)
{
	r=vr;
	s=4*3.14*r*r;
	v=(4*3.14*r*r*r)/3;
}

double sphere::getS()
{
	return s;
}

double sphere::getV()
{
	return v;
}

void sphere::print()
{
	cout<<"r: "<<r<<endl;
}
выдаёт кучу ошибок, по идее не правильно наследую что-то, пишет что перераспределяю классы...

Добавлено через 15 минут
Ну и main пустой пока что.

Код
#include "stdafx.h"
#include "Header1.h"
#include "source.cpp"
#include <iostream>
#include "math.h"

using namespace std;

void main()
{
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru