gpt4 book ai didi

C++ 继承 : protected variables not available

转载 作者:太空狗 更新时间:2023-10-29 19:52:17 24 4
gpt4 key购买 nike

我在 XCode 中有以下 C++ 代码,给出了两个我无法理解的错误:

#include <iostream>


class Buch{
public:
Buch (long int nummer = 0, char autor[25] = (char*)"", int jahr = 0, bool ausgel = false);

long int getNr();
int getJahr();

protected:
long int __nummer;
char __autor[25];
int __jahr;
bool __ausgel;

void setAusl(bool x);
bool getAusl();
};

class FachBuch : Buch {
public:
void setSWort(int sw);
int getSWort();

protected:
char __fach[15];
int __swort;
};

class UBuch : Buch {
public:
void setAlter(int a);
int getAlter();

protected:
int __kateg;
char __land[15];

private:
int _ab_alter;
};

class Bildband : UBuch {
public:
Bildband(long int nummer = 0, char autor[25] = (char*)"", int jahr = 0, int kategorie = 0, char land[15] = (char*)"");
};

Buch::Buch (long int nummer, char autor[25], int jahr, bool ausgel) {
__nummer = nummer;
//_autor = autor;
__jahr = jahr;
__ausgel = ausgel;
}

long int Buch::getNr() {
return __nummer;
}

int Buch::getJahr() {
return __jahr;
}

void Buch::setAusl(bool x) {
__ausgel = x;
}

bool Buch::getAusl() {
return __ausgel;
}


void FachBuch::setSWort(int x) {
__swort = x;
}

int FachBuch::getSWort() {
return __swort;
}


void UBuch::setAlter(int x) {
_ab_alter = x;
}

int UBuch::getAlter() {
return _ab_alter;
}

Bildband::Bildband(long int nummer, char autor[25], int jahr, int kategorie, char land[15]) {

__nummer = nummer; // error message: Cannot cast 'Bildband' to its private base class 'Buch'

//Buch(nummer, autor, jahr, false); // error message: '__nummer' is a private member of 'Buch'

}

int main () {
Bildband Masuren(356780, (char*)"Kranz", 2010, 4, (char*)"Polen");
return 0;
}

我收到以下错误:main.cpp:92:5: 无法将“Bildband”转换到其私有(private)基类“Buch”main.cpp:92:5: '__nummer' 是 'Buch' 的私有(private)成员

我对 C++ 的了解非常有限,我在 google 上一无所获,可能主要是因为我缺乏必要的 C++ 基础知识。

谁能向我解释为什么会出现这些错误以及我需要查找哪些术语才能理解该问题?

提前致谢。

最佳答案

它们不可用,因为 UBuch 继承了 Buch privately。定义类时,继承默认是私有(private)的。

// These two lines mean the same thing:
class UBuch : Buch
class UBuch : private Buch

Buch 的所有成员都被继承,但是那些对 UBuch 可见的成员被继承为 private to UBuch

这意味着 UBuch 外部的代码无法访问 UBuch 对象上 Buch 的任何成员,也不能转换指针或引用到 UBuch 对象到指向 Buch 的指针或引用。

这包括派生 UBuch 的类。

class Bildband : UBuch

尽管 Buch 在继承链中,但它的成员被 UBuch 私有(private)继承,因此 Bildband 无法访问成员继承自 Buch

要解决这个问题,您应该公开继承 Buch(并且您可能希望所有其他类也从它们各自的基类公开继承):

class UBuch : public Buch

此外,请注意,包含两个连续下划线的标识符是环境保留的,因此代码中的所有此类标识符(__nummer__autor 等)都会导致 未定义的行为

关于C++ 继承 : protected variables not available,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28286310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com