虚函数的使用及抽象类

#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;
}
  •  
  1. cout<<sizeof(Base)<<endl;:输出基类 Base 的大小(字节数)。

  2. cout<<sizeof(Derived)<<endl;:输出派生类 Derived 的大小(字节数)。

  3. 如果基类 Base 的大小是4字节,通常这意味着该基类可能包含了一个4字节大小的成员变量。可能的情况是,基类中有一个整型(int)类型的成员变量。

  • cout<<pb[2].data<<endl;

  1. 首先,输出 "Base-ctor" 和 "Derived-ctor" 表示创建了多个 Base 类和 Derived 类的对象,这是因为在使用数组初始化时,会创建数组中每个元素的实例。

  2. 因为 Derived 类继承了 Base 类,所以在创建 Derived 类对象时,首先会调用 Base 类的构造函数来初始化继承自 Base 类的部分,然后再执行 Derived 类自己的构造函数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值