C++类和对象--继承

Posted RealooC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++类和对象--继承相关的知识,希望对你有一定的参考价值。

继承时面向对象三大特性之一

有些类与类之间存在特殊的的关系,例如下图当中:

\'C++类和对象--继承_C++\'

我们发现:定义这些类时,下级别的成员除了拥有上一级的特性,还有自己的特性,这个时候我们应该考虑继承,减少重复代码

继承的基本语法

class  子类  :  继承方式  父类

子类也成为派生类;父类也成为基类


#include <iostream>
using namespace std;

//普通实现界面

//java
class java
{
public:
void header()
{
cout << "首页、公开课、登录/注册、...(公共头部)" << endl;
}
void footer()
{
cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
}
void left()
{
cout << "java、python、C++...(公共分类列表)" << endl;
}
void content()
{
cout << "java学科视频" << endl;
}
};
//python
class python
{
public:
void header()
{
cout << "首页、公开课、登录/注册、...(公共头部)" << endl;
}
void footer()
{
cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
}
void left()
{
cout << "java、python、C++...(公共分类列表)" << endl;
}
void content()
{
cout << "python学科视频" << endl;
}
};
class cpp
{
public:
void header()
{
cout << "首页、公开课、登录/注册、...(公共头部)" << endl;
}
void footer()
{
cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
}
void left()
{
cout << "java、python、C++...(公共分类列表)" << endl;
}
void content()
{
cout << "C++学科视频" << endl;
}
};

//继承实现界面

//公共界面类
class BasePage
{
public:
void header()
{
cout << "首页、公开课、登录/注册、...(公共头部)" << endl;
}
void footer()
{
cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
}
void left()
{
cout << "java、python、C++...(公共分类列表)" << endl;
}
};
//java
class Java: public BasePage
{
public:
void content()
{
cout << "java学科视频" << endl;
}
};
//python
class Python: public BasePage
{
public:
void content()
{
cout << "python学科视频" << endl;
}
};
//cpp
class Cpp : public BasePage
{
public:
void content()
{
cout << "C++学科视频" << endl;
}
};
void test1()
{
cout << "java视频界面如下:" << endl;
Java jv;
jv.header();
jv.footer();
jv.left();
jv.content();
cout << "------------------------" << endl;
}
void test2()
{
cout << "python视频界面如下:" << endl;
Python py;
py.header();
py.footer();
py.left();
py.content();
cout << "------------------------" << endl;
}
void test3()
{
cout << "C++视频界面如下:" << endl;
Cpp cp;
cp.header();
cp.footer();
cp.left();
cp.content();
cout << "------------------------" << endl;
}
int main()
{
test1();
test2();
test3();
}

继承方式

三种继承方式均访问不到父类的私有成员

\'C++类和对象--继承_C++_02\'


//定义一个基类
class Base
{
public:
int A;
protected:
int B;
private:
int C;
};

公共继承

访问权限不变

//公共继承
class Son1 : public Base
{
public:
void func()
{
A = 10;//父类中的公共权限成员,到了子类依然是公共权限成员
B = 10;//父类中的保护权限成员,到了子类中依然是保护权限成员
//C = 10;//err 父类中的私有权限成员,子类访问不到
}
};
void test1()
{
Son1 s1;
s1.A = 20;
//s1.B = 20;//err 保护权限 类外不能访问
}

保护继承

父类中的公共权限在子类中变为保护权限

父类中的保护权限在子类中不变

//保护继承
class Son2 : protected Base
{
public:
void func()
{
A = 10;//父类中的公共权限成员,到了子类变成保护权限成员
B = 10;//父类中的保护权限成员,到了子类中依然是保护权限成员
//C = 10;//err 父类中的私有权限成员,子类访问不到
}
};
void test2()
{
Son2 s2;
//s2.A = 20;//err 保护权限 类外不能访问
//s2.B = 20;//err 保护权限 类外不能访问
}

私有继承

父类中的公共权限在子类中变为私有权限

父类中的保护权限在子类中变为私有权限

//私有继承
class Son3 : private Base
{
public:
void func()
{
A = 10;//父类中的公共权限成员,到了子类变成私有权限成员
B = 10;//父类中的私有权限成员,到了子类变成私有权限成员
8-2:C++继承之父类和子类对象赋值转换(公有继承)也即切片

C++ 类和对象期末复习笔记——继承和派生

C++基础——C++面向对象之类对象与继承基础总结(类和对象概念构造函数与析构函数this指针继承)

C++进阶:继承C++为什么要引入继承 | 继承概念及定义 | 基类和派生类对象赋值转换 | 继承中的作用域 | 派生类的默认成员函数 | 继承与友元/静态成员 | 复杂的菱形继承及菱形虚拟继承

C++进阶:继承C++为什么要引入继承 | 继承概念及定义 | 基类和派生类对象赋值转换 | 继承中的作用域 | 派生类的默认成员函数 | 继承与友元/静态成员 | 复杂的菱形继承及菱形虚拟继承

C++进阶:继承C++为什么要引入继承 | 继承概念及定义 | 基类和派生类对象赋值转换 | 继承中的作用域 | 派生类的默认成员函数 | 继承与友元/静态成员 | 复杂的菱形继承及菱形虚拟继承