передача параметров — C ++ получает значения от родителя и деда, которые были инициализированы в main

Я новичок в C ++, и у меня есть следующая проблема. У меня есть три класса: дедушка, родитель и ребенок. Идея такая

#include <iostream>
#include <stdlib.h>
#include <string.h>

class Book
{   protected:
long int number;
char author[25];
int year;
bool lent;

void setLent(bool x);
bool getLent();
public:
Book(long int n, char a[25], int j, bool x);
long int getNr();
int getYear();
void print();
};class UBook: public Book
{   protected:
int categ;
char country[15];
private:
int for_age;
public:
UBook(int t, int k, char l[15]);
void setAge(int a);
int getAge();
};class PicBook: public UBook
{   private:
static const int for_age=6;
public:
PicBook(long int n, char a[25], int j,int k, char l[15]);
};

Book::Book(long int n, char a[25], int j, bool x)
{number=n;
strncpy(author, a, 25);
year=j;
lent=x;}

long int Book::getNr()
{return number; }

int Book::getYear()
{return year;}

void Book::setLent(bool x)
{lent=x;}

bool Book::getLent()
{return lent;}

void Book::print()
{
std::cout << "Booknumber: " << number << std::endl;
std::cout << "Author: " << author << std::endl;
std::cout << "Year: " << year << std::endl;
if (lent==0)
std::cout << "Lentiehen [ja/nein]: nein" << std::endl;
else
std::cout << "Lentiehen [ja/nein]: ja" << std::endl;
}

UBook::UBook(int t, int k, char l[15]): Book(number, author, year, lent)
{for_age=t;
categ=k;
strncpy(country, l, 15);
}

void UBook::setAge(int a)
{for_age = a;}

int UBook::getAge()
{return for_age;}PicBook::PicBook(long int n, char a[25], int j,int k, char l[15]): UBook(for_age, categ, country)
{
std::cout << "Booknumber: " << number << std::endl;
std::cout << "Author: " << author << std::endl;
std::cout << "Year: " << year << std::endl;
std::cout << "For age: " << for_age << std::endl;
std::cout << "Categorie: " << categ << " [Bildband]" << std::endl;
std::cout << "Country: " << country << std::endl;
}int main()
{
PicBook somebook(356780, "test", 2010, 4, "France");

system("pause");
return 0;
}

Тем не менее, если я делаю тестовый вывод в «child» какой-то странный вывод:

Book Nr: 4283296
Author: ð■(
Year: 1988844484
For age: 6 /*(the only correct output)*/
Categorie: 2686760 [Bildband]
Country: ♠\A
Press any key to continue . . .

Поэтому мои параметры не передаются правильно. Первые 3 параметра — это члены из класса прародителя, последние два — из родительского класса. Я думаю, что есть проблема с моим конструктором в «child».

Заранее спасибо за помощь!

-1

Решение

Приятно, что вы изучаете C ++. Лучший язык;) Из кода, который вы разместили, было не совсем понятно, что вы хотели, поэтому я расширил ваш пример, чтобы он был немного более понятным. Я изменился protected в public так что вы можете распечатать данные с cout непосредственно, чтобы увидеть вывод на экране. Дополнительно я добавил переменную в каждом из классов. Функции, которые имеют то же имя, что и класс, называются «конструкторами», и их входные параметры обычно используются для установки членов класса (test…) Попробуйте этот код и дайте нам знать, если вы довольны результатом.

#include <iostream>
#include <stdlib.h>

using namespace std;

class grandparent
{
public:
int test;
public:
grandparent(int a): test(a){};
};

class parent: public grandparent
{
public:
int other;
public:
parent(int a, int b): grandparent(a), other(b) {};
};

class child: public parent
{
public:
int child_other;
public:
child(int a, int b, int c): parent(a, b), child_other(c) {};
};

int main()
{
child sometest(1,6, 7);

cout << sometest.test << endl;
cout << sometest.other << endl;
cout << sometest.child_other << endl;

return 0;
}

Надеюсь это поможет.

0

Другие решения

О боже, я нашел решение, и это действительно было так просто. Я просто должен был изменить мои std :: couts:

PicBook::PikBook(long int n, char a[25], int j,int k, char l[15]): UBook (for_age, categ, country)
{
std::cout << "Book Nr:: " << n << std::endl;
std::cout << "Author: " << a << std::endl;
std::cout << "Year: " << j << std::endl;
std::cout << "Category: " << k << " [Picture Book]" << std::endl;
std::cout << "country: " << l << std::endl;
}
0

По вопросам рекламы [email protected]