#include<iostream>
using namespace std;
class Base
{
public:
Base():data(count)
{
cout<<"Base-ctor"<<endl; // 构造函数输出 Base-ctor
++count; // 静态成员变量 count 自增
}
~Base()
{
cout<<"Base-dtor"<<endl; // 析构函数输出 Base-dtor
--count; // 静态成员变量 count 自减
}
static int count; // 声明静态成员变量 count
int data; // 实例成员变量 data,用 count 初始化
};
int Base::count; // 静态成员变量 count 的定义
class Derived : public Base
{
public:
Derived():data(count), data1(data)
{
cout<<"Derived-ctor"<<endl; // 派生类构造函数输出 Derived-ctor
++count; // 静态成员变量 count 自增
}
~Derived()
{
cout<<"Derived-dtor"<<endl; // 派生类析构函数输出 Derived-dtor
--count; // 静态成员变量 count 自减
}
static int count; // 声明派生类特有的静态成员变量 count
int data1; // 派生类特有的实例成员变量 data1
int data; // 派生类特有的实例成员变量 data
};
int Derived::count = 10; // 派生类特有的静态成员变量 count 的定义和初始化为 10
int main()
{
cout<<sizeof(Base)<<endl; // 输出基类 Base 的大小
cout<<sizeof(Derived)<<endl; // 输出派生类 Derived 的大小
Base* pb = new Derived[3]; // 创建 Derived 类型的数组,存储在基类指针中
cout<<pb[2].data<<endl; // 输出数组第三个元素(基类对象)的 data 成员
cout<<((static_cast<Derived*>(pb))+2)->data1<<endl; // 输出数组第三个元素(派生类对象)的 data1 成员
delete[] pb; // 删除动态分配的 Derived 类型数组
cout<<Base::count<<endl; // 输出基类的静态成员变量 count 的值
cout<<Derived::count<<endl; // 输出派生类的静态成员变量 count 的值
return 0;
}
-
cout<<sizeof(Base)<<endl;
:输出基类Base
的大小(字节数)。 -
cout<<sizeof(Derived)<<endl;
:输出派生类Derived
的大小(字节数)。 -
如果基类 Base 的大小是4字节,通常这意味着该基类可能包含了一个4字节大小的成员变量。可能的情况是,基类中有一个整型(int)类型的成员变量。
-
cout<<pb[2].data<<endl;
-
首先,输出 "Base-ctor" 和 "Derived-ctor" 表示创建了多个 Base 类和 Derived 类的对象,这是因为在使用数组初始化时,会创建数组中每个元素的实例。
-
因为 Derived 类继承了 Base 类,所以在创建 Derived 类对象时,首先会调用 Base 类的构造函数来初始化继承自 Base 类的部分,然后再执行 Derived 类自己的构造函数。