在下面的代码Num2(int x)
构建Num1
的实例并立即销毁它? Num1(x)
初始化私有的int a
和int b
,因此派生类无法访问它们。但是,为什么编译器不抱怨?
此外,Num1
的尺寸为8,Num2
为12,Num3
为4。
#include <iostream>
using namespace std;
class Num1 {
int a;
int b;
public:
Num1(int x) : a(x), b(0) {}
~Num1() {}
};
class Num2 : public Num1 {
int c;
public:
Num2(int x) : Num1(x) {}
~Num2() {}
};
class Num3 {
int d;
public:
Num3() {}
~Num3() {}
};
int main() {
cout << "sizeof(Num1) = " << sizeof(Num1) << endl;
cout << "sizeof(Num3) = " << sizeof(Num3) << endl;
cout << "sizeof(Num2) = " << sizeof(Num2) << endl;
return 0;
}
为什么Num2
12的大小无法访问a
和b
?有什么意义呢?
答案 0 :(得分:0)
Num1是Num2的父类。当整数x传递给Num2构造函数时,调用基础构造函数将该参数传递给它(初始化int a)。
另外
cout << "sizeof(Num2) = " << sizeof(Num3) << endl;
应该是
cout << "sizeof(Num2) = " << sizeof(Num2) << endl;
答案 1 :(得分:0)
私有变量可以帮助完成课堂幕后的工作,创作者不希望你干扰的工作。仅仅因为你看不到或访问私有变量,这并不意味着编译器只是扔掉它们。也许在这个例子中你会更有意义:
class Animal {
int legs;
public:
Animal(int legs) : legs(legs) {}
~Animal() {}
std::string how_fast() {
if(legs > 4) {
return "Super fast!";
} else if (legs > 2) {
return "Pretty fast.";
} else {
return "Slow.";
}
}
};
class Lion: public Animal{
int humans_eaten;
public:
Lion(int eaten) : Animal(4), humans_eaten(eaten) {}
~Lion() {}
};
此处legs
在Animal
类中是私有的,因为这应该已经为孩子们所知。如果我在Lion
进行计算需要我使用腿数,那么它总是4,但是Animal
并非总是这样。
即使Lion永远不能访问Animal的legs
,但动物需要知道how_fast
中计算的数字。这有意义吗?