I have an abstract class "Mark" and it has a child class "Int_num". I also have a "Subject" class. I want a pointer to the address in the memory of the "Mark" class to be written to the "mark" parameter when calling its constructor. What should I do to make the mark pointer point to the "Mark" class?" occurred, after the compiler complaint about "expression must have class type" or something like that in mark.print_mark()?
class Mark {
private:
    int mark;
public:
    virtual void change_mark(int);
    virtual void print_mark();
    virtual int return_mark();
};
class Int_mark : public Mark {
private:
    int mark;
public:
    Int_mark();
    Int_mark(int);
    ~Int_mark();
    void change_mark(int = 0);
    void print_mark() const;
    int return_mark() const;
};
Int_mark::Int_mark() {
    std::string str_mark;
    std::cout << "New mark: ";
    std::cin.ignore();
    std::getline(std::cin, str_mark);
    str_mark = ltrim(rtrim(str_mark));
    int new_mark;
    try {
        new_mark = stoi(str_mark);
    } catch(...) {
        std::cout <<"wq";
        mark = 1;
        return ;
    }
    try {
        if((new_mark < 1) || (new_mark > 5))
            throw 1;
        else
            mark = new_mark;
    } catch(int a) {
        std::cout << "qw" << std::endl;
        mark = 1;
    }
}
void Int_mark::print_mark() const {
    std::cout << "Mark: " << mark << std::endl;
}
Subject
#include "Mark.h"
#include <string>
#include <vector>
class Subject {
private:
    std::string name_subject;
    std::string type_subject;
    unsigned hour_subject = 0;
    void *mark = nullptr;
public:
    Subject();
    Subject(std::string, int);
    Subject(std::string, bool);
    ~Subject();
    void change_mark(unsigned);
    void change_mark(bool);
    void rename_subj(std::string);
    void add_hour(unsigned);
};
Subject::Subject() {
    std::string name_sub;
    std::cout << "Введите название предмета: ";
    getline(std::cin, name_sub);
    name_sub = split_string(name_sub);
    name_subject = name_sub;
    int select = 2;
    if(select == 1) {
        type_subject = "Bool";
        //mark = new Bool_mark();
    } else {
        type_subject = "Int";    
        mark = new Int_mark();   
//What should I do to make the mark pointer point to the "Mark" class?
        mark.print_mark();
}
}
main
#include "subject/Subject.h"
using namespace std;
int main() {
    Subject q;
}
What am I doing wrong? How should I do this?