小白从零开始学c++之继承对象的内存空间

构造函数调用顺序,先调用父类,再调用子类

cpp 复制代码
#include<iostream>

using namespace std;

//基类   父类
class Base{
public: //公有权限   类的外部  类的内部 
        Base(){cout<<"Base()"<<endl;}
        Base(int a):baseA(a)
        {
            cout<<"Base(int a)"<<endl;
        }

        ~Base(){cout<<"~Base()"<<endl;}

        void setData(int a){
            baseA = a;
        }
        void show(){
            cout<<"baseA:"<<baseA<<"\t addr:"<<&baseA<<endl;
        }
protected: //保护权限  类的内部  子类
        
private: //私有权限  类的内部
        int baseA;
};

//子类  派生类
class Child: public Base
{
public: //公有权限   类的外部  类的内部 
        //在参数列表中指定 父类的构造函数
        Child():Base(100)
        {
            cout<<"Child()"<<endl;
        }
        Child(int a,int b):Base(a),childA(b)
        {
            cout<<"Child(int a)"<<endl;
        }

        ~Child(){cout<<"~Child()"<<endl;}

        void show(){
            Base::show();
            cout<<"childA:"<<childA<<"\t addr:"<<&childA<<endl;
        }
protected: //保护权限  类的内部

private: //私有权限  类的内部
        int childA;   
         
};


int main()
{
    Child mya(100,200);

    cout<<"mya size:"<<sizeof(mya)<<"\t addr:"<<&mya<<endl;

    mya.show();
}

打印结果:

cpp 复制代码
gec@ubuntu:/mnt/hgfs/GZ22229/14C++/05/1-code$ ./a.out 
Base(int a)
Child(int a)
mya size:8     addr:0x7ffed6dc6630
baseA:100     addr:0x7ffed6dc6630
childA:200     addr:0x7ffed6dc6634
~Child()
~Base()

注意:

1、子类调用成员函数的时候会检测该成员函数在子类中是否存在,如果存在就调用自己的, 如果不存在就调用 父类的(前提是父类要有这个函数)

2、如果子类和父类存在同名函数,那么在子类中 父类的函数成员会被隐藏,默认调用的就是子类函数成员。如果要调用父类的函数成员必须添加类名和作用域。

mya.Base::showData();

练习1:

设计一个基类动物类(属性:体重,颜色,年龄 行为:跑,吃,睡),构造方法初始化属性

设计一个猫类继承动物类(属性:体重,颜色,年龄,品种 行为:跑吃睡,抓老鼠,叫)

定义一个猫对象--咖菲猫,调用猫的喊叫行为,抓老鼠行为 ,输出猫的属性

练习2:编写一个输出学生和教师数据的程序,学生数据有编号、姓名、年龄、学号和成绩;教师数据有编号、姓名、年龄、职称和部门。要求声明一个 person 类,并作为学生数据操作类 student 和教师数据操作类 teacher 的基类

cpp 复制代码
#include <iostream>
#include <cstring>
//将命名空间打开
/*
设计一个基类 动物类(属性:体重、颜色、年龄 、性别    行为:吃喝拉撒)
设计一个猫类 继承动物类(属性:体重、颜色、年龄 、性别、    行为:吃喝拉撒、抓老鼠)
定义一个猫对象 ---断尾猫,调用猫的行为*/
using namespace std;
//动物类
class zoon{
public:   //公有权限
    zoon(int weight,int age, const char * color){
        this->weight = weight;
        this->age = age;
        strcpy(this->color,color);
    }
    void show(){
        cout << "weight:" << weight <<endl;
        cout << "age:"   << age <<endl;
        cout << "color:"  << color <<endl;
    }
protected:
    //私有属性
    int weight;    //体重
    int age;         //年龄
    char color[256];  //颜色
};
//猫类
class cat:public zoon
{
public:   //公有权限
    cat(int weight,int age,const char * color,const char *type):zoon(weight,age,color) {
        strcpy(this->type,type);
    }
    void show(){
        cout << "weight:" << weight <<endl;
        cout << "age:"   << age <<endl;
        cout << "color:"  << color <<endl;
        cout << "type:"  << type <<endl;
    }
    void behavior(){
        cout << "behavior" <<endl; 
    }
private:
    //私有
    char type[256];
    // cat Broken_tail(10,6,"white","BrokenTail");
};
int main()
{
    cat mya(10,6,"white","BrokenTail");
    mya.show();
    mya.behavior();  //行为
    
    
    return 0;
}
相关推荐
踢足球092911 分钟前
寒假打卡:2026-2-7
java·开发语言·javascript
一只小小的芙厨14 分钟前
AT_tkppc3_d 巨大チェスボード 题解
c++·题解
我在人间贩卖青春16 分钟前
C++之继承与派生类的关系
c++·向上造型·向下造型
Trouvaille ~17 分钟前
【Linux】应用层协议设计实战(二):Jsoncpp序列化与完整实现
linux·运维·服务器·网络·c++·json·应用层
_OP_CHEN23 分钟前
【算法基础篇】(五十七)线性代数之矩阵乘法从入门到实战:手撕模板 + 真题详解
线性代数·算法·矩阵·蓝桥杯·c/c++·矩阵乘法·acm/icpc
天天爱吃肉821828 分钟前
【跨界封神|周杰伦×王传福(陶晶莹主持):音乐创作与新能源NVH测试,底层逻辑竟完全同源!(新人必看入行指南)】
python·嵌入式硬件·算法·汽车
im_AMBER28 分钟前
Leetcode 114 链表中的下一个更大节点 | 删除排序链表中的重复元素 II
算法·leetcode
EmbedLinX30 分钟前
嵌入式之协议解析
linux·网络·c++·笔记·学习
薛定谔的猫喵喵35 分钟前
基于PyQt5的视频答题竞赛系统设计与实现
开发语言·qt·音视频
岱宗夫up41 分钟前
Python 数据分析入门
开发语言·python·数据分析