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

Задачи для тренировки и лучшего понимания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Теория плагинов http://www.cyberforum.ru/cpp/thread123914.html
Всем привет. Для одной моей проги, нужно реализовать поддержку плагинов. Плагины предполагаются простенькие, написанные на Си. То, что плагин, это просто .so файл - понятно. То, что прога может дергать из .so файла функции - тоже понятно. 1. Непонятно то, как сам плагин сможет дергать функции из программы? 2. Программа написана на С++, но плагины предполагаю писать на Си, во избежания...
C++ ./massdown: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./massdown) всем хай! собираю свою программу на новом железе х86_64 долго не получалось скомпилить. при линковке получал вот такое сообщение: relocation R_X86_64_32 against `a local symbol' я так понял, это из-за того что часть библиотек от которых зависит цель, были собраны как 32-ух битные. но с этим вроде все нормально, пересобрал все либы - скомпилировалось. теперь при запуске получаю такое... http://www.cyberforum.ru/cpp/thread98890.html
Как понять этот константный указатель? C++
В общем, имеется класс Cat. Объект класса - SimpleCat. И имеется функция с константым указателем: const SimpleCat* const FunctionTwo(const SimpleCat* const theCat) Что обозначают все эти const? Насколько я понимаю: 1. Константный указатель. 2. Может ссылаться только на FunctionTwo 3. Ничего не изменяет в объекте. 4. Ничего не делает с объектом theCat.
C++ Перехват и подмена вызываемых функций
Здравствуйте. Нужно подменить вызов таких функций как open(), lstat(), stat(), read(), write(), mkdir(), chdir(), getcwd() для определенного процесса. Интересует мнение других. Как бы вы реализовали эту задачу. Спасибо!

Показать сообщение отдельно
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
13.02.2011, 16:08     Задачи для тренировки и лучшего понимания
решил самую первую задачу в теме(person)
Только не получается конструировать обьект BadDude с помощью конструкторов PokerPlayer и Gunslinger(строки остаются пустыми)
classes.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
#ifndef CLASSES_H_
#define CLASSES_H_
#include <string>
class Person
 { 
 protected:
  std::string name,surname;   
 public:
   Person(){};
   Person(std::string n,std::string s):name(n),surname(s){};
  ~Person(){};
  virtual void Set(std::string n,std::string s);
  virtual void Show();
};
 
class Gunslinger:virtual public Person
{
public:
    Gunslinger(){};
    Gunslinger(std::string n,std::string s,unsigned short k):Person(n,s),stvol(k){};
    void Set(std::string n,std::string s,unsigned short k);
    virtual~Gunslinger(){};
    virtual void Show();
    double Draw();
protected:
    unsigned short stvol;
};
 
 class PokerPlayer:virtual public Person
 {
 public:
     PokerPlayer(){};
     PokerPlayer(std::string n,std::string s):Person(n,s){};
     virtual~PokerPlayer(){};
     int Draw();
     void Show();
     void Set(std::string n,std::string s);
 };
 
 class BadDude:public Gunslinger,public PokerPlayer
{
public:
    BadDude(std::string n,std::string s,unsigned short k):PokerPlayer(n,s),Gunslinger(n,s,k){};
    virtual~BadDude(){};
    double Gdraw();
    int Cdraw();
    void Set(std::string n,std::string s,unsigned short k);
    void Show();
};
#endif
functions.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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include<iostream>
#include<string>
#include "classes.h"
#include<ctime>
//------------------------------------------------
//--------------------PERSON----------------------
//------------------------------------------------
void Person::Set(std::string n="Name",std::string s="Surname")
{
 name=n;
 surname=s;
}
void Person::Show()
{
 std::cout<<"Name:"<<name<<"\n"<<"Surname:"<<surname<<"\n";
}
//------------------------------------------------
//--------------------GUNSLINGER------------------
//------------------------------------------------
void Gunslinger::Set(std::string n,std::string s,unsigned short k)
{
 Person::Set(n,s);
 stvol=k;
}
double Gunslinger::Draw()
{
 double hours,minutes;
 srand((unsigned)time(NULL));
 hours=rand()%(24);
 minutes=rand()%(59)+1;
 minutes/=100;
 double tim=hours+ minutes;
 return tim;
}
void Gunslinger::Show()
{
    Person::Show();
    std::cout<<"Number of stvols:"<<stvol<<"\n";
    std::cout<<"Time:"<<Draw()<<"\n";
}
//------------------------------------------------
//--------------------POKERPLAYER-----------------
//------------------------------------------------
int PokerPlayer::Draw()
{
 srand((unsigned)time(NULL));
 return rand()%(52)+1;
}
void PokerPlayer::Show()
{
    Person::Show();
    std::cout<<"Next card:"<<Draw()<<"\n";
}
void PokerPlayer::Set(std::string n,std::string s)
{
 Person::Set(n,s);
}
//------------------------------------------------
//--------------------BADDUDE---------------------
//------------------------------------------------
int BadDude::Cdraw()
{
 return PokerPlayer::Draw();
}
double BadDude::Gdraw()
{
 return Gunslinger::Draw();
}
void BadDude::Set(std::string n,std::string s,unsigned short k)
{
 name=n;
 surname=s;
 stvol=k;
}
void BadDude::Show()
{
 std::cout<<"Name:"<<name<<"\n";
 std::cout<<"Surname:"<<surname<<"\n";
 std::cout<<"Number of stvols:"<<stvol<<"\n";
 std::cout<<"Next card:"<<Cdraw()<<"\n";
 std::cout<<"Time:"<<Gdraw()<<"\n";
}
person.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
#include <iostream>
#include<string>
#include "classes.h"
int main()
{
 std::string name,surname;
 unsigned short type,k;
 std::cout<<"Enter type:\n-1 for person\n-2 for gunslinger\n-3 for poker player\n-4 for bad dude\n";
 std::cin>>type;
 std::cout<<"Enter name\n";
 std::cin>>name;
 std::cout<<"Enter surname\n";
 std::cin>>surname;
 if(type==2 || type==4)
 {
  std::cout<<"Enter number of stvols\n";
  std::cin>>k;
 }
 Person* pers;
 switch(type)
 {
  case 1:{pers=new Person(name,surname);break;}
  case 2:{pers=new Gunslinger(name,surname,k);break;}
  case 3:{pers=new PokerPlayer(name,surname);break;}
  case 4:{pers=new BadDude(name,surname,k);break;}
  default:std::cout<<"Illegal type";
 }
 pers->Show();
 std::cin.get();
 std::cin.get();
}
BadDude нормально работает,если заменить строку
C++
1
    BadDude(std::string n,std::string s,unsigned short k):PokerPlayer(n,s),Gunslinger(n,s,k){};
на
C++
1
    BadDude(std::string n,std::string s,unsigned short k){Set(n,s,k);};
в файле "classes.h"
Можете обьяснить плз,как конструировать BadDude с помощью конструкторов PokerPlayer и Gunslinger
 
Текущее время: 04:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru