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

C++ Объекты и Классы - запутался - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
11.05.2012, 00:30     C++ Объекты и Классы - запутался #1
Есть 2 класса и 2 заголовочных класса

Вроде не подчеркивает ничего - при запуске проект крэшиться
В чем у меня ошибка?
- это класс main
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
#include <iostream> //potok vvoda vyvoda
#include <string> 
#include "GeometricalBody.cpp"
#include "Hexagonal_Prism.cpp"
using namespace std;
 
int main()
{
    
    GeometricalBody GB("GB");
 
    Hexagonal_Prism* HP = new Hexagonal_Prism(); // Создаем объект класса Hexagonal_Prism
    GeometricalBody *test = HP;
    HP->Init(2.5,3.6);
 
    cout << "GetSo: " << HP->GetSo() << "\nGetSb: " << HP->GetSb() << "\nGetSp: " << HP->GetSp() << endl;
 
    HP->SetObjectName("ksjfk");
 
    cout << " ----------- " << endl;
    HP->print();
    HP->print2();
    cout << " ------- " << endl;
    test->print();
    test->print2();
    cout << " ----------- " << endl;
 
    Hexagonal_Prism H ; 
    H.name="test"; 
        H.print(); H.print2();
    
    system("PAUSE");
    delete HP; //udalenie objekta
 
    return 0;
 
 
 
 
}
а вот что выдает дебаггер -
1>------ Build started: Project: Lab5, Configuration: Debug Win32 ------
1>Build started 10.05.2012 23:29:33.
1>InitializeBuildStatus:
1> Touching "Debug\Lab5.unsuccessfulbuild".
1>ClCompile:
1> main.cpp
1>c:\users\evgeny\documents\my dropbox\ucheba\c++ labi\lab5\lab5\lab5\geometricalbody.h(15): error C2011: 'GeometricalBody' : 'class' type redefinition
1> c:\users\evgeny\documents\my dropbox\ucheba\c++ labi\lab5\lab5\lab5\geometricalbody.cpp(7) : see declaration of 'GeometricalBody'
1>c:\users\evgeny\documents\my dropbox\ucheba\c++ labi\lab5\lab5\lab5\hexagonal_prism.cpp(7): error C2504: 'GeometricalBody' : base class undefined
1>c:\users\evgeny\documents\my dropbox\ucheba\c++ labi\lab5\lab5\lab5\main.cpp(10): error C2079: 'GB' uses undefined class 'GeometricalBody'
1>c:\users\evgeny\documents\my dropbox\ucheba\c++ labi\lab5\lab5\lab5\main.cpp(10): error C2440: 'initializing' : cannot convert from 'const char [3]' to 'int'
1> There is no context in which this conversion is possible
1>c:\users\evgeny\documents\my dropbox\ucheba\c++ labi\lab5\lab5\lab5\main.cpp(13): error C2440: 'initializing' : cannot convert from 'Hexagonal_Prism *' to 'GeometricalBody *'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\users\evgeny\documents\my dropbox\ucheba\c++ labi\lab5\lab5\lab5\main.cpp(24): error C2027: use of undefined type 'GeometricalBody'
1> c:\users\evgeny\documents\my dropbox\ucheba\c++ labi\lab5\lab5\lab5\geometricalbody.cpp(7) : see declaration of 'GeometricalBody'
1>c:\users\evgeny\documents\my dropbox\ucheba\c++ labi\lab5\lab5\lab5\main.cpp(24): error C2227: left of '->print' must point to class/struct/union/generic type
1>c:\users\evgeny\documents\my dropbox\ucheba\c++ labi\lab5\lab5\lab5\main.cpp(25): error C2027: use of undefined type 'GeometricalBody'
1> c:\users\evgeny\documents\my dropbox\ucheba\c++ labi\lab5\lab5\lab5\geometricalbody.cpp(7) : see declaration of 'GeometricalBody'
1>c:\users\evgeny\documents\my dropbox\ucheba\c++ labi\lab5\lab5\lab5\main.cpp(25): error C2227: left of '->print2' must point to class/struct/union/generic type
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.24
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2012, 00:30     C++ Объекты и Классы - запутался
Посмотрите здесь:

C++ классы и объекты
классы и объекты C++
Классы и объекты на С++ C++
C++ ОБЪЕКТЫ И КЛАССЫ C++
Классы и объекты C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
11.05.2012, 00:37     C++ Объекты и Классы - запутался #2
Цитата Сообщение от jvov Посмотреть сообщение
#include "GeometricalBody.cpp" #include "Hexagonal_Prism.cpp"
почему вы подключаете .cpp файлы а не заголовки .h ?

uses undefined class 'GeometricalBody'
основная ошибка в том что компилятор не может найти объявление/определение вашего класса GeometricalBody.

выкладывайте тогда уж весь код.
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
11.05.2012, 00:41  [ТС]     C++ Объекты и Классы - запутался #3
Цитата Сообщение от antoha398 Посмотреть сообщение
почему вы подключаете .cpp файлы а не заголовки .h ?


основная ошибка в том что компилятор не может найти объявление/определение вашего класса GeometricalBody.

выкладывайте тогда уж весь код.
А я вроде, как объявлял, как .h, но он ругается... может я конечно, что то не так сделал.. я их использую как интерфейс...

И как надо объявить этот класс GeometricalBody?

Могу весь код выложить сюда, а то я похоже запутался в этом ООП?
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
11.05.2012, 00:47     C++ Объекты и Классы - запутался #4
Цитата Сообщение от jvov Посмотреть сообщение
#include "GeometricalBody.cpp"
#include "Hexagonal_Prism.cpp"
если вы объявляли ваш класс в файле *.h, то в main.cpp подключать надо его.
Иначе давайте код сюда)
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
11.05.2012, 00:56  [ТС]     C++ Объекты и Классы - запутался #5
Цитата Сообщение от antoha398 Посмотреть сообщение
если вы объявляли ваш класс в файле *.h, то в main.cpp подключать надо его.
Иначе давайте код сюда)
main.ccp
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
#include <iostream> //potok vvoda vyvoda
#include <string> 
#include "GeometricalBody.cpp"
#include "Hexagonal_Prism.cpp"
using namespace std;
 
int main()
{
    
    GeometricalBody GB("GB");
 
    Hexagonal_Prism* HP = new Hexagonal_Prism(); // Создаем объект класса Hexagonal_Prism указатель  указывает на этот объект
    GeometricalBody *test = HP; // v roditeljskij klass prisoedinjaem naslednika
    HP->Init(2.5,3.6);
 
    cout << "GetSo: " << HP->GetSo() << "\nGetSb: " << HP->GetSb() << "\nGetSp: " << HP->GetSp() << endl;
 
    HP->SetObjectName("Figura");
 
    cout << " ----------- " << endl;
    HP->print();
    HP->print2();
    cout << " ------- " << endl;
    test->print();
    test->print2();
    cout << " ----------- " << endl;
 
    Hexagonal_Prism H ; 
    H.name="test"; 
        H.print(); H.print2();
    
    system("PAUSE");
    delete HP; //udalenie objekta
 
    return 0;
 
 
 
 
}
Фаил - GeometricalBody.ccp
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
#include <iostream> //potok vvoda vyvoda
#include <string> 
 
using namespace std;
 
class GeometricalBody
{
public:
    string name; //переменная, хранящая наименование объекта этого класса
public:
    void print() //для вывода имени объекта и значений вычисленных площадей на экран.
    {
        cout << "Parent name: " << name << endl;
    }
     virtual void print2() //asbtraktnyj klass , dlja pozdeno vjazyvanija (pereopredelenie)
    {
        cout << "Virtual void: " << name << endl;
    }
    GeometricalBody(string name)
    {
        this->name = name;
    }
    GeometricalBody() 
    {
        this->name = "default name";    
    }
};

Фаил - Hexagonal_Prism.ccp

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
#include <iostream> 
#include <string>
#include "GeometricalBody.h"
#include <cmath>
 
class Hexagonal_Prism: public GeometricalBody //nasledovanie 
{
public:
    string name;
    double r;// radius i visota
    double h; //переменная хранящая наименование объекта этого класса.
public:
    
    void SetObjectName(string name) //Для присвоения имени объекту класс содержит функцию SetObjectName
    {
        this->name = name;
    }
    
    void Init(double r, double h) //для инициализации членов-данных класса
    {
        this->r = r;
        this->h = h;
    }
    double GetSo() // plowadj osnovanija
    {
        return (3*(sqrtf(3/2))*(pow(r, 2)));    
    }
    double GetSb() // plowadj bokovaja
    {
        return ((6*r)*h);
    }
    double GetSp() // plowadj polnaja
    {
        return (2*GetSo() + GetSb());
    }
    void print() //для вывода имени объекта 
    {
        cout << "Child name: " << this->name << endl; 
    }
    void print2() //dlja pozdnego svjazyvanija (dimani4eskoe svjazyvanie)
    {
        cout << "Virtual override: " << this->name << endl;
    }
};

Фаил - Hexagonal_Prism.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma once;
#include "GeometricalBody.h"
 
class Hexagonal_Prism {
void Init(double r, double h);
double GetSo();
double GetSb();
double GetSp();
void print();
void print2();
void SetObjectName(string name);
 
public:
    string name;
    double r;
    double h;
}
Фаил - GeometricalBody.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma once
#include <string>
#include <iostream>
 
 
 
 
#pragma once
#include <string>
#include <iostream>
 
using namespace std;
 
class GeometricalBody
{
public:
void print();
virtual void print2();
GeometricalBody(string name);
GeometricalBody(); 
private:
    string name;
};
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
11.05.2012, 01:22     C++ Объекты и Классы - запутался #6
main почти не менял
main.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
#include <iostream> //potok vvoda vyvoda
#include <string>
#include "GeometricalBody.h"
#include "Hexagonal_Prism.h"
using namespace std;
 
int main()
{
 
    GeometricalBody GB("GB");
 
    Hexagonal_Prism* HP = new Hexagonal_Prism(); // Создаем объект класса Hexagonal_Prism указатель  указывает на этот объект
    GeometricalBody *test = HP; // v roditeljskij klass prisoedinjaem naslednika
    HP->Init(2.5,3.6);
 
    cout << "GetSo: " << HP->GetSo() << "\nGetSb: " << HP->GetSb() << "\nGetSp: " << HP->GetSp() << endl;
 
    HP->SetObjectName("Figura");
 
    cout << " ----------- " << endl;
    HP->print();
    HP->print2();
    cout << " ------- " << endl;
    test->print();
    test->print2();
    cout << " ----------- " << endl;
 
    Hexagonal_Prism H ;
    H.name="test";
        H.print(); H.print2();
 
    //system("PAUSE");
    delete HP; //udalenie objekta
 
    return 0;
}


GeometricalBody.h

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
#ifndef GEOMETRICALBODY_H
#define GEOMETRICALBODY_H
 
#include <string>
#include <iostream> //potok vvoda vyvoda
 
 
//using namespace std;
 
class GeometricalBody
{
public:
    std::string name; //переменная, хранящая наименование объекта этого класса
public:
    inline void print() //для вывода имени объекта и значений вычисленных площадей на экран.
    {
        std::cout << "Parent name: " << name << std::endl;
    }
    inline virtual void print2() //asbtraktnyj klass , dlja pozdeno vjazyvanija (pereopredelenie)
    {
        std::cout << "Virtual void: " << name << std::endl;
    }
    GeometricalBody(const std::string &str_name):name(str_name){}
 
    GeometricalBody():name("default name"){}
 
 
 
};
 
#endif // GEOMETRICALBODY_H


Hexagonal_Prism.h

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
47
48
49
50
51
#ifndef HEXAGONAL_PRISM_H
#define HEXAGONAL_PRISM_H
 
#include <iostream>
#include <string>
#include "GeometricalBody.h"
#include <cmath>
using std::string;
using std::cout;
using std::endl;
class Hexagonal_Prism: public GeometricalBody //nasledovanie
{
public:
    string name;
    double r;// radius i visota
    double h; //переменная хранящая наименование объекта этого класса.
public:
 
    void SetObjectName(const string &objName) //Для присвоения имени объекту класс содержит функцию SetObjectName
    {
        name = objName;
    }
 
    void Init(const double &rInit, const double &hInit) //для инициализации членов-данных класса
    {
        this->r = rInit;
        this->h = hInit;
    }
    double GetSo() // plowadj osnovanija
    {
        return (3*(sqrtf(3/2))*(pow(r, 2)));
    }
    double GetSb() // plowadj bokovaja
    {
        return ((6*r)*h);
    }
    double GetSp() // plowadj polnaja
    {
        return (2*GetSo() + GetSb());
    }
    void print() //для вывода имени объекта
    {
        cout << "Child name: " << this->name << endl;
    }
    void print2() //dlja pozdnego svjazyvanija (dimani4eskoe svjazyvanie)
    {
        cout << "Virtual override: " << this->name << endl;
    }
};
 
#endif // HEXAGONAL_PRISM_H


с объявлением и определением класса вы явно запутались)
я все что у было в .cpp сунул в .h c некоторыми доделками.
если будут вопросы, спрашивайте.

Добавлено через 7 минут
Так на будущее, если расбрость класс как полагается это выглятело бы примерно так:
пример
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
//GeometricalBody.h
#ifndef GEOMETRICALBODY_H
#define GEOMETRICALBODY_H
 
#include <string>
 
class GeometricalBody
{
public:
    std::string name; //переменная, хранящая наименование объекта этого класса
public:
    void print() ;
    virtual void print2();
    GeometricalBody(const std::string &str_name):name(str_name){}
 
    GeometricalBody():name("default name"){}
};
 
#endif // GEOMETRICALBODY_H
 
//GeometricalBody.cpp
#include <iostream>
#include "GeometricalBody.h"
void GeometricalBody::print() //для вывода имени объекта и значений вычисленных площадей на экран.
{
    std::cout << "Parent name: " << name << std::endl;
}
 
void GeometricalBody::print2() //asbtraktnyj klass , dlja pozdeno vjazyvanija (pereopredelenie)
{
    std::cout << "Virtual void: " << name << std::endl;
}
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
11.05.2012, 01:33  [ТС]     C++ Объекты и Классы - запутался #7
Цитата Сообщение от antoha398 Посмотреть сообщение
main почти не менял
main.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
#include <iostream> //potok vvoda vyvoda
#include <string>
#include "GeometricalBody.h"
#include "Hexagonal_Prism.h"
using namespace std;
 
int main()
{
 
    GeometricalBody GB("GB");
 
    Hexagonal_Prism* HP = new Hexagonal_Prism(); // Создаем объект класса Hexagonal_Prism указатель  указывает на этот объект
    GeometricalBody *test = HP; // v roditeljskij klass prisoedinjaem naslednika
    HP->Init(2.5,3.6);
 
    cout << "GetSo: " << HP->GetSo() << "\nGetSb: " << HP->GetSb() << "\nGetSp: " << HP->GetSp() << endl;
 
    HP->SetObjectName("Figura");
 
    cout << " ----------- " << endl;
    HP->print();
    HP->print2();
    cout << " ------- " << endl;
    test->print();
    test->print2();
    cout << " ----------- " << endl;
 
    Hexagonal_Prism H ;
    H.name="test";
        H.print(); H.print2();
 
    //system("PAUSE");
    delete HP; //udalenie objekta
 
    return 0;
}


GeometricalBody.h

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
#ifndef GEOMETRICALBODY_H
#define GEOMETRICALBODY_H
 
#include <string>
#include <iostream> //potok vvoda vyvoda
 
 
//using namespace std;
 
class GeometricalBody
{
public:
    std::string name; //переменная, хранящая наименование объекта этого класса
public:
    inline void print() //для вывода имени объекта и значений вычисленных площадей на экран.
    {
        std::cout << "Parent name: " << name << std::endl;
    }
    inline virtual void print2() //asbtraktnyj klass , dlja pozdeno vjazyvanija (pereopredelenie)
    {
        std::cout << "Virtual void: " << name << std::endl;
    }
    GeometricalBody(const std::string &str_name):name(str_name){}
 
    GeometricalBody():name("default name"){}
 
 
 
};
 
#endif // GEOMETRICALBODY_H


Hexagonal_Prism.h

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
47
48
49
50
51
#ifndef HEXAGONAL_PRISM_H
#define HEXAGONAL_PRISM_H
 
#include <iostream>
#include <string>
#include "GeometricalBody.h"
#include <cmath>
using std::string;
using std::cout;
using std::endl;
class Hexagonal_Prism: public GeometricalBody //nasledovanie
{
public:
    string name;
    double r;// radius i visota
    double h; //переменная хранящая наименование объекта этого класса.
public:
 
    void SetObjectName(const string &objName) //Для присвоения имени объекту класс содержит функцию SetObjectName
    {
        name = objName;
    }
 
    void Init(const double &rInit, const double &hInit) //для инициализации членов-данных класса
    {
        this->r = rInit;
        this->h = hInit;
    }
    double GetSo() // plowadj osnovanija
    {
        return (3*(sqrtf(3/2))*(pow(r, 2)));
    }
    double GetSb() // plowadj bokovaja
    {
        return ((6*r)*h);
    }
    double GetSp() // plowadj polnaja
    {
        return (2*GetSo() + GetSb());
    }
    void print() //для вывода имени объекта
    {
        cout << "Child name: " << this->name << endl;
    }
    void print2() //dlja pozdnego svjazyvanija (dimani4eskoe svjazyvanie)
    {
        cout << "Virtual override: " << this->name << endl;
    }
};
 
#endif // HEXAGONAL_PRISM_H


с объявлением и определением класса вы явно запутались)
я все что у было в .cpp сунул в .h c некоторыми доделками.
если будут вопросы, спрашивайте.

Добавлено через 7 минут
Так на будущее, если расбрость класс как полагается это выглятело бы примерно так:
пример
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
//GeometricalBody.h
#ifndef GEOMETRICALBODY_H
#define GEOMETRICALBODY_H
 
#include <string>
 
class GeometricalBody
{
public:
    std::string name; //переменная, хранящая наименование объекта этого класса
public:
    void print() ;
    virtual void print2();
    GeometricalBody(const std::string &str_name):name(str_name){}
 
    GeometricalBody():name("default name"){}
};
 
#endif // GEOMETRICALBODY_H
 
//GeometricalBody.cpp
#include <iostream>
#include "GeometricalBody.h"
void GeometricalBody::print() //для вывода имени объекта и значений вычисленных площадей на экран.
{
    std::cout << "Parent name: " << name << std::endl;
}
 
void GeometricalBody::print2() //asbtraktnyj klass , dlja pozdeno vjazyvanija (pereopredelenie)
{
    std::cout << "Virtual void: " << name << std::endl;
}
А срр файлы получается не нужны? Их удалить или что-то в них надо поменять? HEXAGONAL_PRISM.ccp - он ругается, я его за коментил - и сразу заработало.
Выходит, что .h - это и есть, классы?
Спасибо, Вам, огромное за помощь.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
11.05.2012, 01:36     C++ Объекты и Классы - запутался #8
Цитата Сообщение от jvov Посмотреть сообщение
А срр файлы получается не нужны? Их удалить или что-то в них надо поменять? HEXAGONAL_PRISM.ccp - он ругается, я его за коментил - и сразу заработало.
да, cpp не нужны. я из них все кинул в .h.
там было в принципе все правильно, только вы это не туда засунули)
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
11.05.2012, 01:43  [ТС]     C++ Объекты и Классы - запутался #9
Цитата Сообщение от antoha398 Посмотреть сообщение
да, cpp не нужны. я из них все кинул в .h.
там было в принципе все правильно, только вы это не туда засунули)
А вообще, в С++ так правильно работать с классами?
Потому, как мне показалось, что надо в .cpp раскидать все(классы), как в Java куча jar файлов, вот я и наделал .cpp
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
11.05.2012, 01:51     C++ Объекты и Классы - запутался #10
не, в с++ принято (особенно в больших проектах) объявлять классы, функции и т.д. в заголовках (файлы с расширением .h), а их реализацию (определение) писать в файл исходников (.cpp).
Там, где надо применять эти классы, функции и т.д. подключается нужный заголовок.

можно конечно все сделать в одном файле main.cpp, но это не гуд)
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
11.05.2012, 01:57  [ТС]     C++ Объекты и Классы - запутался #11
Цитата Сообщение от antoha398 Посмотреть сообщение
не, в с++ принято (особенно в больших проектах) объявлять классы, функции и т.д. в заголовках (файлы с расширением .h), а их реализацию (определение) писать в файл исходников (.cpp).
Там, где надо применять эти классы, функции и т.д. подключается нужный заголовок.

можно конечно все сделать в одном файле main.cpp, но это не гуд)
Значит, у меня не совсем верно сейчас получилось.
Странно, но у меня на подобие и было так сделано. В .h я объявил функции и поля, а в .срр их реализацию (если не запихивать .срр в .h), почему тогда у меня ошибки выдавал?
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
11.05.2012, 01:59     C++ Объекты и Классы - запутался #12
Я тут привел на примере класса GeometricalBody, как надо правильно
Цитата Сообщение от antoha398 Посмотреть сообщение
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
//GeometricalBody.h
#ifndef GEOMETRICALBODY_H
#define GEOMETRICALBODY_H
 
#include <string>
 
class GeometricalBody
{
public:
    std::string name; //переменная, хранящая наименование объекта этого класса
public:
    void print() ;
    virtual void print2();
    GeometricalBody(const std::string &str_name):name(str_name){}
 
    GeometricalBody():name("default name"){}
};
 
#endif // GEOMETRICALBODY_H
 
//GeometricalBody.cpp
#include <iostream>
#include "GeometricalBody.h"
void GeometricalBody::print() //для вывода имени объекта и значений вычисленных площадей на экран.
{
    std::cout << "Parent name: " << name << std::endl;
}
 
void GeometricalBody::print2() //asbtraktnyj klass , dlja pozdeno vjazyvanija (pereopredelenie)
{
    std::cout << "Virtual void: " << name << std::endl;
}
}
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
11.05.2012, 02:01  [ТС]     C++ Объекты и Классы - запутался #13
Цитата Сообщение от antoha398 Посмотреть сообщение
Я тут привел на примере класса GeometricalBody, как надо правильно
Ещё раз огромное спасибо! Завтра почитаю, и постараюсь разобраться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2012, 02:02     C++ Объекты и Классы - запутался
Еще ссылки по теме:

C++ Классы и объекты
Классы и объекты C++
C++ Классы и объекты в С++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
11.05.2012, 02:02     C++ Объекты и Классы - запутался #14
у вас же дважды (и в .h и в .cpp) был объявлен класс.

Цитата Сообщение от jvov Посмотреть сообщение
Ещё раз огромное спасибо! Завтра почитаю, и постараюсь разобраться.
Удачи!
Yandex
Объявления
11.05.2012, 02:02     C++ Объекты и Классы - запутался
Ответ Создать тему
Опции темы

Текущее время: 18:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru