您的位置:首页 > 其它

29 继承(一)

2016-03-29 08:53 459 查看

三种继承方式



#include <iostream>
using namespace std;

class Base
{
public:
int x_;
protected:
int y_;
private:
int z_;

};

class PublicInherit : public Base//公有继承
{
public:
void Test()
{
x_ = 10;
y_ = 20;
//z_ = 30;//基类私有成员无法直接访问
}
private:
int a_;
};

class PublicPublicInherit : public PublicInherit
{
public:
void Test()
{
y_ = 20;
}

};
class PrivateInherit : private Base//私有继承
{
public:
void Test()
{
x_ = 10;
y_ = 20;
//z_ = 30;
}

};

int main(void)
{
PublicInherit pub;
pub.x_ = 20;

PrivateInherit pri;
//pri.x_ = 10;
return 0;
}


接口继承与实现继承

将类的公有成员函数称为接口

公有继承,基类的公有成员函数在派生类中仍然是公有的,换句话说是基类的接口成为派生类的接口,因而将它称为接口继承。

实现继承,对于私有、保护继承,派生类不继承基类的接口。派生类将不再支持基类的公有接口,它希望能重用基类的实现而已,因此将它称为实现继承。

继承与重定义

对基类的数据成员的重定义

对基类成员函数的重定义分为两种

overwrite

与基类完全相同

与基类成员函数名相同,参数不同

override

#include <iostream>
using namespace std;

class Base
{
public:
Base() :x_(0)
{

}
int GetBaseX() const
{
return x_;
}

void Show()
{
cout << "Base::Show ..." << endl;
}
int x_;
};

class Derived : public Base
{
public:
Derived() : x_(0)
{

}
int GetDerivedX() const
{
return x_;
}
void Show(int n)
{
cout << "Derived::Show " << n << endl;
}
void Show()
{
cout << "Derived::Show " << endl;

}
int x_;//重定义时隐藏了基类的成员

};

int main(void)
{
Derived d;
d.x_ = 10;
cout << d.GetBaseX << endl;
cout << d.GetDerivedX() << endl;

d.Show();//调用派生类不带参数的Show
d.Base::Show();//调用基类Show
return 0;
}


class A
{
public:
void FunA()
{
...
}
};
//组合、将一个类作为另一个类的对象成员。委托
class B
{
public:
void FunB()
{
a.FunA();
}
private:
A a_;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  继承