C++继承和派生
文章目录
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、继承方法与权限问题
1.继承的写法
class parent //父类 基类
{};
//子类 派生类
//公有继承
class son1:public parent
{
public:
protected:
};
//保护继承
class son2:protected parent
{
public:
protected:
};
//私有继承
class son3:private parent
{
public:
protected:
};
- 继承和派生
- 继承:子类中没有产生新的属性或者行为
- 派生:派生类中有新的属性和行为产生
class 子类名:继承方式 父类名
{
};
继承方式就是权限限定词
2.继承实质与权限问题
- 继承的实质:父类的数据和成员在子类中有一份
- 权限问题:继承方式只会增强父类属性在子类中的权限显示
public | protected | private | |
---|---|---|---|
protected继承 | protected | protected | 不可直接访问 |
public继承 | public | protected | 不可直接访问 |
public继承 | private | private | 不可直接访问 |
#include <iostream>
#include <string>
using namespace std;
//父类
class parent
{
public:
void print()
{
cout << name << "\t" <<age << endl;
}
string& getWife()
{
return wife;
}
protected:
string name;
int age;
private:
string wife;
};
//子类
class son1 :public parent
{
public:
void printSon()
{
print();
cout << name << "\t" << age << endl;
//cout << wife << endl; 父类中私有属性不能被直接访问访问 但是可以通过父类间接访问
cout << getWife() << endl;
}
protected:
};
class A
{
public:
int a1;
protected:
int a2;
private:
int a3;
};
class B:public A
{
public:
//int a1;
protected:
//int a2;
private:
//int a3; 不能直接访问
};
class C :protected A
{
public:
protected:
//int a1; public显示为protected()
//int a2;
private:
//int a3; 不能直接访问
};
class D :private A
{
public:
void print()
{
cout << a1 << endl;
cout << a2 << endl;
}
protected:
private:
//int a1; public显示为private()
//int a2;
//int a3; 父类的私有属性不能直接访问
};
//私有继承会导致当前父类无法在孙子类中有任何作用
class F :public D
{
public:
protected:
};
int main()
{
son1 boy;
boy.printSon()