C++四:继承与派生

C++四:继承与派生

一、概念

   继承就是从先辈处得到属性和行为特性。类的继承,是指新的类从已有类的那里得到的特性。类的派生,就是指已有类产生新类的过程。

二、应用

定义为

class 派生类名:继承方式  基类名, ..  继承方式 基类名n
{
    派生类成员声明;
};

继承的好处在于解决了代码的重用性和可扩充性。

一、公用继承
基类的公有成员和保护成员的访问在派生类,而基类的私有成员不可直接访问。

#include <iostream>
using namespace std;
class A {
public:
    int i = 20;
    virtual void aaa() {
        cout << "A:aaa()" << endl;
    }
};
class B :public A {
public:
    int i = 21;
    void aaa() {
        cout << "B:aaa()" << endl;
    }
};
int main() {
    A * pb = new B();
    pb->aaa();
    cout << pb->i << endl;
    B * b = new B();
    cout << b->A::i << endl;
    cout << b->i << endl;
    b->A::aaa();
    return 0;
}
运行结果为:
B:aaa()
20
20
21
A:aaa()

二:私有继承
则是:class 类名:private 基类名
此时,基类中的公有成员与保护成员都在派生类中以私有成员的身份出现。
例如将代码中的“class B :public A”改为“class B :private A”
系统将会报错:

C2248   “A::i”: 无法访问 private 成员(在“A”类中声明)   
C2248   “A::aaa”: 无法访问 private 成员(在“A”类中声明)

三、保护继承
基类的公有成员与私有成员都以保护成员的身份出现在派生类中,而基类的私有成员不可访问。

#include<iostream>
#include<assert.h>
using namespace std;
class A {
public:
    int a;
    A() {
        a2 = 2;
        a = 4;
    }
    void fun() {
        cout << a << endl;    
        cout << a2 << endl;  
    }
protected:
    int a2;
};
class B : protected A {
public:
    int a;
    B(int i) {
        A();
        a = i;
    }
    void fun() {
        cout << a << endl;       
        cout << a2 << endl;      
    }
};
int main() {
    B b(10);
    cout << b.a << endl;       
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Drac/p/11667742.html
今日推荐