随笔——继承与派生

本文详细介绍了 C++ 中的继承与派生概念,包括如何通过派生类继承基类的属性和方法,如何重写基类的方法,以及如何正确地使用构造函数和析构函数。同时,还探讨了不同访问权限(如 protected)的作用范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//继承与派生的概念
#include<iostream>
using namespace std;
class node//基类
{
private:
    string name;//名字
    int garde;//分数
public:
    void out()
    {
        cout<<"name:"<<name<<endl;
        cout<<"garde:"<<garde<<endl;
    }
    void enter()
    {
        cout<<"name:";
        cin>>name;
        cout<<"garde:";
        cin>>garde;
    }
};
class nnode:public node//派生类
{
private:
    string deparment;//部门
public:
    void out()//重名
    {
        cout<<"deparment:"<<deparment<<endl;
    }
    void nenter()
    {
        node::enter();//基类函数调用
        cout<<"deparment:";
        cin>>deparment;
    }
};
int main()
{
    node s1;
    nnode s2;
    s1.enter();
    s1.out();
    s2.nenter();
    s2.out();//函数重名
    cout<<"-----------"<<endl;
    s2.node::out();
}
/*
派生类对象包含基类对象,写法:class 派生类名:继承方式说明符 基类名{........};
对于派生类,会继承基类的成员,函数。也就是拥有基类所有特点,但派生类的成员函
数无法访问基类的私有成员.如果派生类中函数(变量)与基类中函数(变量)重名,
访问的就是派生类中的函数(变量),这种方式叫做‘覆盖’。在派生类中调用基类函数名
的方法为:基类名::函数名。
*/
//protected可访问范围
#include<ostream>
using namespace std;
class node
{
private:
    int x;
public:
    int y;
protected:
    int z;
};
class nnode:public node
{
    void init()
    {
//        x=1;//不能访问基类的私有成员
        y=1;
        z=1;//可以访问基类的保护成员
        node f;
//        f.z=1;//错:f是新定义的类,虽然在派生类内,但不是派生类,不能访问保护成员
    }
};
int main()
{
    node a;
    nnode b;
//    int n=a.z;//错:不在派生类内,不能访问基类私有成员
//    int m=b.x;//错:不能访问b的私有成员
}
/*
公有成员>=protected(保护成员)可访问的范围>=私有成员,保护成员的可访问范围在这
两者之间,保护成员扩大的访问范围表现在:基类的保护成员可以在派生类成员函数中访
问。派生类成员函数只能访问所继承的基类的保护成员,不能访问其他基类的保护成员。
*/
//派生类的析构函数和构造函数
#include<iostream>
using namespace std;
class node
{
private:
    int x,y;
public:
    node(int a,int b)
    {
        x=a,y=b;
        cout<<"create node"<<endl;
    }
    ~node()
    {
        cout<<"delete node"<<endl;
    }
    void out()
    {
        cout<<x<<y;
    }
};
class nnode:public node
{
private:
    int z;
public:
//    nnode(){};//错:派生类使用无参函数,基类也应使用默认构造函数(无参函数),可基类中构造函数被重新定义,没有了默认构造函数
    nnode(int a,int b,int c):node(a,b),z(c)
    {
        cout<<"create nnode"<<endl;
    };
    ~nnode()
    {
        cout<<"delete nnode"<<endl;
    }
    void nout()
    {
        node::out();
        cout<<z<<endl;
    }
};
int main()
{
    nnode a(1,2,3);
    a.nout();
}
/*
在派生类生成时,先执行基类的构造函数,再执行派生类构造函数。在消亡时,先执行
派生类类的析构函数,再执行基类的析构函数
*/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值