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

Наследование абстрактного класса, компилятор достал материться - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ "Первый после Hello, world!". Программа решения квадратного уравнения http://www.cyberforum.ru/cpp-beginners/thread642040.html
Добрый день, уважаемые форумчане. Покритикуйте пожалуйста, программу вывода на экран в полиномиальной форме и нахождения корней квадратного уравнения. Особые проблемы, собственно, возникли с первой частью - над тем, как вывести на экран полином, отвечающий при любых введенных коэффициентах всем правилам математики, пришлось немало поломать голову. Результаты таковы: class poly_part //class...
C++ Классы наследники Всем привет, прошу помочь разобраться с ошибкой: 1>e:\my programs for c++\lesson 9 numb 9\lesson 9 numb 9\main.cpp(59) : error C2661: publication2::publication2: нет перегруженной функции, принимающей 3 аргументов 1>e:\my programs for c++\lesson 9 numb 9\lesson 9 numb 9\main.cpp(79) : error C2661: publication2::publication2: нет перегруженной функции, принимающей 3 аргументов вот код С++... http://www.cyberforum.ru/cpp-beginners/thread642032.html
C++ Приведение LPVOID к классу "непостоянной" величины
В поток посылаю экземпляр класс : userThread = CreateThread(NULL, NULL, ConnectionShell, (LPVOID)(&userCurrent), NULL, NULL); Где пытаюсь излвечь экземпляр : DWORD CALLBACK ConnectionShell(LPVOID lParam) { USER* userCurrent = new USER; memcpy(userCurrent, lParam, 44); // 44 - размер экземпляра после вызова стандартного\ конструктора userCurrent->Connection(); // Здесь так же побывали...
В чём разница между total = total + trans и total += trans? C++
Добрый день. Изучаю четвертое издание Липпмана. Автор задает вопрос: "В программе книжного магазина, при суммировании объектов trans и total, использован обычный оператор плюс, а не составной оператор суммы с присвоением. Почему не использован составной оператор?". Насколько мне известно а += b идентично a = a + b. Единственные догадки по этому поводу в том, что составной оператор суммы не...
C++ Найти количество вхождений одного списка в другой http://www.cyberforum.ru/cpp-beginners/thread641997.html
Здравствуйте. Помогите, пожалуйста, разобраться: у меня была задача - алгоритмом Рабина-Карпа (то есть посредством выискивания хеш-значений) найти количество вхождений одного списка в другой. Но нахождения одних лишь хеш-значений оказалось мало. Дело в том, что я считал хеш-значения как сумму элементов списка и получалось что списки 5, 4, 3, 2, 1 и 1, 2, 3, 4, 5 - суть, одно и то же. В связи с...
C++ Функциий system Доброго времени суток. Прошу Вас помочь мне решить одну проблему: Мне требуется создать 50 папок с именами от 1 до 50 включительно. Вот мой код:#include <stdlib.h> #include <conio.h> using namespace std; int main() { system("color A"); for (int i=1; i<=50; i++) { подробнее

Показать сообщение отдельно
Martinz
1 / 1 / 0
Регистрация: 04.01.2011
Сообщений: 37
24.08.2012, 16:31     Наследование абстрактного класса, компилятор достал материться
Уже весь мозг сломал, не понимаю, почему компилятор начинает ругаться.
Есть абстрактный базовый класс в отдельном хедере:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
 
class Shape
{
public:
    /*virtual double Dist(const Shape&) = 0; //1. */
    virtual void Read() = 0;
    virtual void Move(int delta_x, int delta_y) = 0;
    virtual Shape& Draw() = 0;
    virtual ~Shape() {};
private:
    virtual bool Set(int,int) = 0;
};//Shape
Есть его наследник в отдельном хедере:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include "Shape.h"
 
class Point : public Shape
{
public:
    /*double Dist(const Point&); //2. */
    void Read();
    void Move(int delta_x, int delta_y);
    Point& Draw();
    ~Point();
    Point(int = 0, int = 0);
    Point(const Point&);
    Point& operator= (const Point&);
private:
    bool Set(int x_, int y_);
    int x, y;
};//Point
Описание класса Point отдельным файлом .cpp:
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
#include <iostream>
#include "math.h"
#include "Point.h"
 
using namespace std;
 
/*double Point::Dist(const Point& pt)
{
return 0;
}//Dist 3. */
 
void    Point::Read()
{
}//Read
 
void    Point::Move(int delta_x, int delta_y)
{
}//Move
 
bool    Point::Set(int x_, int y_)
{ 
}
 
Point&  Point::Draw()
{
return *this;
}//Draw
 
//Special methods
Point::~Point()
{
}//~Point
 
Point::Point(int x_, int y_)
{
}//Point
 
Point::Point(const Point& pt)
{
}//Point copy
 
//Redefined operators
Point& Point::operator= (const Point& rs)
{
return *this;
}//operator=
Я специально оставил функции пустыми, чтобы не отвлекал лишний текст. Вот в таком виде всё компилируется, ошибок НОЛЬ. Запросто создаются точки Point a,b, выполняются функции с ними.
Теперь убираем комментарии с номером 1, 2, 3 которые тут красным цветом выделены - иначе говоря добавляем в класс Shape вирт.функцию Dist, переопределяем её в классе Point, и при попытке создать точку Point a получаем ошибку:
C++
1
2
3
error C2259: 'Point' : cannot instantiate abstract class
1>          due to following members:
1>          'double Shape::Dist(const Shape &)' : is abstract
В припадке нубского недоумения ломаю клавиатуру и ругаюсь вслух, десять раз перепроверил, синтаксис вроде нигде не нарушен, создана вирт. функция в Shape, такая же функция записана в Point, переопределена, больше ничего не делал! Однако теперь мой класс Point принимается за абстрактный. А вместо объектов Point пытается создать объект Shape.

Укажите на ошибки пожалуйста, можете потроллить, если это очевидно, только объясните.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru