您的位置:首页 > 编程语言 > C语言/C++

继承

2016-03-22 13:22 357 查看
三种继承方式
公有继承
保护继承
私有继承
1.公有继承
基类的公有成员和保护成员被继承时保持原来的访问权限,而基类的私有成员在派生类中是不可见的。
2.保护继承
基类的公有成员和保护成员被继承时将成为派生类的保护成员,子类内可访问,类外不可访问。
3.私有继承
基类的公有成员和保护成员被继承时将成为派生类的私有成员,并且不能被这个派生类的子类访问。
*基类的私有成员不可访问
构造与析构顺序

构造与析构顺序

class B
{
public:
B()
{
cout << "B()" << endl;
}
~B()
{
cout << "~B()" << endl;
}
};
class D :public B
{
public:
D()
{
cout << "D()" << endl;
}
~D()
{
cout << "~D()" << endl;
}
};
int main()
{
D d;
system( "pause");
return 0;
}

D继承自B,构造时先调用基类的构造函数,再调用子类的构造函数。析构时先调用子类析构,再析构基类(调用子类析构时会自动调用基类的析构函数)。
若在继承时继承了多个基类,则构造时先基类再子类,其中基类按先后顺序构造,析构相反
同名隐藏
class B
{
public:
void show()
{
cout << "B::show()" << endl;
}
void show(int )
{
cout << "B::show(int)" << endl;
}

};
class D :public B
{
public:
void show()
{
cout << "D::show()" << endl;
}
};
int main()
{
D d;
d.show();
system( "pause");
return 0;
}
输出:D::show()
只调用子类中的show函数
-->同名隐藏:在派生类中重新定义了基类中同名的函数(非虚函数和静态函数),此时基类的同名函数被隐藏

赋值兼容规则
1.子类对象可直接赋给基类对象(切割)
Base b;
D d;
b=d;//正确
d=b;//错误
2.基类对象不能赋值给子类对象
3.基类指针/引用可直接指向子类对象
4.子类指针/引用不能直接指向基类对象
D *pd=&b;//错误
B *pb=&d//正确


友元关系不能继承,基类的友元不能访问子类的私有成员和保护成员(即父亲的朋友不是儿子的朋友)。

static
基类定义了static成员,则整个继承体里只有一个这样的成员(共享一个成员),无论派生多少类,仅有这一个static成员
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 继承