子类从 C++ 中的基类继承的内容
what a subclass inherits from a base class in C++?
我正在尝试通过继承的概念(在C++中进行测试(。这里引用自: http://en.wikipedia.org/wiki/Inheritance_(对象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语言也是如此吗?(我知道我可以使用静态变量来达到我的想法,但这不是我要说的(
您有三个类实例,因此它们是独立的。这意味着子类不必声明ii
.将类视为模板(不要将它们与语言构造模板混淆(,然后创建它们的实例。
您不会希望所有人员始终具有相同的字段值吧?
话虽如此,您可能正在寻找(可能不是/希望不是(静态变量。
在面向对象中查找实例和类。
你不应该将类视为现有实体(好吧,至少在C++中(,而应该将其视为描述类实例行为的模式 - 即,以某种方式(C++ - 使用显式或隐式构造函数创建的单个对象(。
代码Student s;
将s
描述为类 Student
的实例。类定义中的每个字段都引用实例,而不是类本身。
但是,您可以声明一个静态字段,该字段将在Student
的所有实例之间共享,即使没有创建单个实例:您也可以将其视为类变量,与实例变量相反。
所以,回到你的问题:子类继承了模式:实例中存在某些字段/方法的事实。但是,这些值对于实例完全是独立的(不包括类(静态(变量(。
C++中的继承仅存在于类级别,而不存在于实例级别。
- C++ 继承:基类中重载 operator+ 的 2 次在派生类中无法正常工作
- 使用 "using" 关键字继承基类的复制和移动构造函数
- 获取继承基类类型的元组
- C++:继承基类方法
- 当我们想要私下继承基类时,为什么要进行名称公开
- 继承基类,定义基类的原型方法,但从第三个对象调用子类的方法
- C++继承基类使用派生类的成员
- C++-Do派生类继承基类的静态成员
- C++ OOP 体系结构:决定是从基类声明对象还是继承基类
- 继承基类时遇到问题
- 继承基类的一部分
- 我不希望派生类继承基类的构造函数
- 派生类继承基类赋值运算符
- C++继承基类析构函数
- 派生类是否继承基类使用的前向声明?
- 我继承基类以及多重继承的超类
- c++中的派生类构造函数可以继承基类构造函数吗?
- 继承的问题:派生类不继承基类
- 使子类继承基类的现有实例
- c++防止继承基类的特定公共成员