什么子类继承自C ++中的基类?

时间:2012-05-06 15:12:12

标签: c++ inheritance

我试图通过继承的概念(在C ++中测试)。引用自:http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming

“在面向对象编程(OOP)中,继承是一种重用现有对象代码,或从现有对象或两者建立子类型的方法,具体取决于编程语言支持”

然后我测试了这段代码:

class Person
{
public:
    int ii;
    Person():ii(0){}
};
class Student : public Person
{
};
class Student1 : public Person
{
};

然后,

Person p;
Student s;
Student1 s1;
s.ii = 222;
p.ii = 333;
cout << s.ii << endl; // prints 222
cout << s1.ii << endl; // prints 0
cout << p.ii << endl; // prints 333

如结果所示,每个子类都有自己的ii变量版本,每个子类从基类中获取复制值。因此,当我们改变一个时,它不会影响其他人。

这不是我在第一时间想到的。我认为当从基类继承时,所有子类都将继承相同的属性实例。每个子类不需要保留自己的版本。这可以利用重复使用和节省空间的优势。

我误解了什么吗?如果我是对的,对其他OOP语言也是如此吗? (我知道我可以使用静态变量来实现我的思想,但这不是我所说的)

2 个答案:

答案 0 :(得分:3)

您有三个实例类,因此它们是独立的。这意味着子类不必声明ii。想象类似模板的类(尽管不要将它们与语言构造模板混淆),然后创建它们的实例。

你不希望所有人总是拥有相同的字段值吗?

话虽如此,您可能正在寻找(可能不是/希望不是)静态变量。

以面向对象的方式查找实例

答案 1 :(得分:2)

您应该将一个类视为一个现有实体(至少在C ++中),而不是一个描述类实例行为的模式 - 即单个对象以某种方式创建(在C ++中 - 使用显式或隐式构造函数)。

代码Student s;s描述为类Student的实例。类定义中的每个字段都引用实例,而不是类本身。

然而,您可以声明 static 字段,该字段将在Student的所有实例之间共享,即使没有创建单个实例:您可以将其视为< em> class 变量,与实例变量相反。

所以,回到你的问题:子类继承模式:实例中存在某些字段/方法的事实。但是,这些值完全独立于实例(排除了类(静态)变量)。

C ++中的继承仅存在于 class 级别,而不存在于实例级别。