C++中级-继承

基本语法

#include <iostream>
#include <string>
using namespace std;

//语法:子类类名:public 父类类名

class Animal
{
public:
    Animal() {};
    void walk(string args) {
        cout << args <<" is walking" << endl;
    }
};

class Dog:public Animal
{
public:
    Dog() {
        name = "dog";
    }
    string name;
};

class Cat:public Animal
{
public:
    Cat() {
        name = "cat";
    }
    string name;
};



int main() { 
    Dog d;
    d.walk(d.name);

    Cat c;
    c.walk(c.name);

    return 0;
}

继承方式

#include <iostream>
#include <string>
using namespace std;
//private。public。protected继承
/*
公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。
继承方式/基类成员    public成员    protected成员    private成员
public继承        public        protected        不可见
protected继承    protected    protected        不可见
private继承        private        private            不可见
*/

//1.public
class Dad {
public:
    int a = 11;
protected:
    int b = 22;
private:
    int c = 33;
};

class Son :public Dad{
public:
};


class Son2 :protected Dad {
public:
};


class Son3 :private Dad {
public:
};
int main() {

    return 0;
}

多继承

#include <iostream>
#include <string>
using namespace std;

class GrandFather{
public:

    int gargs = 11;
};

class Father:public GrandFather{ 
public: 
    int fargs = 22;
};

class Son:public GrandFather,public Father{ 
public: 

    int s1 = 5;
    int s2 = 6;
    
};



int main() { 
    Son son;
    cout << sizeof(son) << endl;//20个字节
    return 0; 
}

构造与析构顺序/属性继承访问

#include <iostream>
using namespace std;

//1.构造解析顺序;
//2.父类子类属性与方法同名访问办法;
//3.静态属性访问办法;

class Base {
public:
    Base() {cout << "Base in Base" << endl;};
    ~Base() { cout << "~Base in Base" << endl; }
    int a = 20;
    void func() { cout << "Base func" << endl; }
    static int static_b;
};
int Base::static_b = 33;


class Son:public Base {
public:
    Son() { cout << "Son in Son" << endl; };
    ~Son() { cout << "~Son in Son" << endl; }
    int a = 33;
    void func() { cout << "Son func" << endl; }
    static int static_b;

};
int Son::static_b = 66;

int main() { 
    Son s;
    cout << s.a << endl;
    cout << s.Base::a << endl;//2.1通过+作用域才能访问父类的属性。

    s.func();
    s.Base::func();//2.2通过+作用域才能访问父类的方法。
    
    //3.1通过对象访问
    cout << s.static_b << endl;
    cout << s.Base::static_b << endl;
    //3.2通过类名访问
    cout << "''':"<<Son::Base::static_b << endl;
    cout << "''':" << Son::static_b << endl;
    return 0; 
}

/*
顺序:
Base in Base
Son in Son
~Son in Son
~Base in Base

*/

#include <iostream>#include <string>using namespace std;
//语法:子类类名:public 父类类名
class Animal{public:Animal() {};void walk(string args) {cout << args <<" is walking" << endl;}};
class Dog:public Animal{public:Dog() {name = "dog";}string name;};
class Cat:public Animal{public:Cat() {name = "cat";}string name;};
int main() { Dog d;d.walk(d.name);
Cat c;c.walk(c.name);
return 0;}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值