C++——类的继承(派生)

类的继承就是子类可以拥有父类的成员变量和成员函数

 

//public 修饰的成员变量 方法 在类的内部 类的外部都能使用
//protected: 修饰的成员变量方法,在类的内部使用 ,在继承的子类中可用 ;其他 类的外部不能被使用
//private: 修饰的成员变量方法 只能在类的内部使用 不能在类的外部。子类可以继承,但不能使用

类的调用语法

class Parent
{
public:
            int a; 
protected:
            int b; 
private:
            int c; 
};



class Child : protected Parent
{
public:
protected:
private:

};

 

一、不同的继承方式会改变继承成员的访问属性

1)C++中的继承方式会影响子类的对外访问属性

public继承:父类成员在子类中保持原有访问级别

private继承:父类成员在子类中变为private成员

protected继承:父类中public成员会变成protected

                            父类中protected成员仍然为protected

                            父类中private成员仍然为private

2)private成员在子类中依然存在,但是却无法访问到。不论种方式继承基类,派生类都不能直接使用基类的私有成员

3)C++中子类对外访问属性表

 

父类成员访问级别

 

public

proteced

private

public

public

proteced

private

proteced

proteced

proteced

private

private

private

private

Private

二、兼容性原则


/*
兼容规则中所指的替代包括以下情况:
1)子类对象可以当作父类对象使用
2)子类对象可以直接赋值给父类对象
3)子类对象可以直接初始化父类对象
4)父类指针可以直接指向子类对象
5)父类引用可以直接引用子类对象
*/

#include <iostream>
using namespace std;

class Parent
{
public:
    void printP()
    {
        cout<<"我是爹..."<<endl;
    }

    Parent()
    {
        cout<<"parent构造函数"<<endl;
    }

    Parent(const Parent &obj)
    {
        cout<<"copy构造函数"<<endl;
    }

private:
    int a;
};

class child : public Parent
{
public:
    void printC()
    {
        cout<<"我是儿子"<<endl;
    }
protected:
private:
    int c;
};





//C++编译器 是不会报错的 .....
void howToPrint(Parent *base)
{
    base->printP(); //父类的 成员函数 

}

void howToPrint2(Parent &base)
{
    base.printP(); //父类的 成员函数 
}
void main()
{
    //

    Parent p1;
    p1.printP();

    child c1;
    c1.printC();
    c1.printP();


    //赋值兼容性原则 
    //1-1 基类指针 (引用) 指向 子类对象
    Parent *p = NULL;
    p = &c1;
    p->printP();  

    //1-2 指针做函数参数

    howToPrint(&p1);
    howToPrint(&c1); 

    //1-3引用做函数参数
    howToPrint2(p1);
    howToPrint2(c1); 


    //第二层含义

    //可以让子类对象   初始化   父类对象
    //子类就是一种特殊的父类
    Parent p3 = c1;


    cout<<"hello..."<<endl;
    system("pause");
    return ;
}

 

三、继承中的构造析构调用原则

         原则:    先构造父类,再构造成员变量、最后构造自己

                          先析构自己,在析构成员变量、最后析构父类

                          //先构造的对象,后释放

四、继承中的同名成员变量处理方法

1、当子类成员变量与父类成员变量同名时

2、子类依然从父类继承同名成员

3、在子类中通过作用域分辨符::进行同名成员区分(在派生类中使用基类的同名成员,显式地使用类名限定符

4、同名成员存储在内存中的不同位置

 

转载于:https://www.cnblogs.com/long5683/p/11401231.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值