C++继承和派生

来源:互联网 发布:手机模拟笛子软件 编辑:程序博客网 时间:2024/06/10 03:32
在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。
派生类的定义格式
单继承的定义格式如下:
1
2
3
4
class<派生类名>:<继承方式><基类名>
{
<派生类新定义成员>
};
其中,class是关键词,<派生类名>是新定义的一个类的名字,它是从<基类名>中派生的,并且按指定的<继承方式>派生的。<继承方式>常使用如下三种关键字给予表示:
public 表示公有继承;
private 表示私有继承;
protected 表示保护继承;
多继承的定义格式如下:
1
2
3
4
5
6
7
class<派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
 
{
 
<派生类新定义成员>
 
};
可见,多继承与单继承的区别从定义格式上看,主要是多继承的基类多于一个。
如果省略继承方式,对'class'将采用私有继承,对'struct'将采用公有继承。
也就是说
1
2
3
4
5
class Base1{};
 
struct Base2{};
 
class Derive:Base1,Base2{};
那么,Derive类将私有继承Base1,公有继承Base2。相当于:
1
class Derive:private Base1,public Base2{};

公有继承时,水平访问和垂直访问对基类中的公有成员不受限制;
私有继承时,水平访问和垂直访问对基类中的公有成员也不能访问;
保护继承时,对于垂直访问同于公有继承,对于水平访问同于私有继承。
对于基类中的私有成员,只能被基类中的成员函数和友元函数所访问,不能被其他的函数访问。
基类与派生类的关系任何一个类都可以派生出一个新类,派生类也可以再派生出新类,因此,基类和派生类是相对而言的。
#include<iostream>using namespace std;class Base{public:Base() { va = 0; vb = 0; }Base(int a,int b) { va = a; vb = b; }void set_va(int a) { va = a; }void set_vb(int b) { vb = b; }int get_va() { return va; }int get_vb() { return vb; }void print();~Base() {};private:int va;int vb;};void Base::print(){cout << "va = " << va << endl;cout << "vb = " << vb << endl;}class Derived : public Base{private:int vc;public:Derived();Derived(int a, int b, int c);int get_vc() { return vc; }void set_vc(int c) { vc = c; }void print();};Derived::Derived(): Base(){vc = 0;}Derived::Derived(int a, int b, int c) : Base(a, b){vc = c;}void Derived::print(){Base::print();cout << "vc = " << vc << endl;}int main(){cout << "Base class:\n";Base x(10, 20);x.print();cout << "Derived class:\n";Derived y(30, 40, 50);y.print();y.set_va(60);y.set_vb(70);y.set_vc(80);y.print();return 0;}



原创粉丝点击