派生类的定义格式
单继承的定义格式如下:
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;
}