C++程序设计视频北大31-35(继承和派生)

2024-04-23 16:32

本文主要是介绍C++程序设计视频北大31-35(继承和派生),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、继承和派生

派生类对象包含着基类对象,而且基类对象存储位置位于派生类对象对象新增成员变量之前

#include <iostream>
#include <string>
using namespace std;class student
{
private:string name;string id;//学号char gneder;//性别int age;
public:void printinfo();void setinfo(const string &name_, const string &id_, int age_, char gender_);string getname() { return name; }
};class graduatestudent :public student//研究生继承了student类
{
private:string department;//系
public:void baoyan(){cout << "qualified for baoyan" << endl;}void printinfo()//覆盖{student:printinfo();//调用基类的printinfo,输出共性cout << "department" << department << endl;}
};

 

二、继承和复合关系

继承表示基类完全属于派生类,举例:男人和女人有很多相似点,但女人类不可以继承男人类;应该是先写人类,男人类和女人类派生人类。
复合关系举例:每一个圆对象都包含点对象,这个点对象是圆心,但圆并不是点,不是继承关系。
class point {};
class circle
{point center//圆里面包含点,圆心
};

 

错误使用:
这种“人中有狗,狗中有人”的做法导致了循环定义。避免循环定义的方法是在一个类中使用另一个类的指针,而不是对象作为成员变量。
正确方法

三、基类派生类同名成员

 

void derived::access()
{j = 5;//error,j是基类私有成员变量i = 5;//引用的派生类的ibase::i = 5;//引用的基类的ifunc()//派生类base::func()//基类的
}derived obj;
obj.i = 1;
obj.base::i = 1;

 

protected 只能在派生类定义时访问,在main 函数里面是不可以的。

 

 

 

四、派生类的构造函数

先初始化从基类构造函数
class bug
{
private:int nlegs; int ncolor;
public:int ntype;bug(int legs, int color);//基类构造函数void printbug(){};
};class flybug :public bug// flybug 继承bug
{int nwings;
public:flybug(int legs, int color, int wings);//声明派生类构造函数
};
//定义flybug构造函数
flybug::flybug(int legs, int color, int wings) :bug(legs, color)//初始化列表;调用基类bug初始化legs 和 color
{nwings = wings;//wings直接写在构造函数里面就好
}int main()
{flybug b(2, 3, 4);b.printbug();b.ntype = 1;b.nlegs = 2;//error
}

 

五、public 继承的赋值兼容规则

class base{};
class derived :public base{};
base b;
derived d;

 

1、派生类对象可以赋值给基类对象.(派生类就是一个基类对象)
b=d;//d里面包含的b里面的内容赋值给b

 

2、派生类对象可以初始化基类引用
base &br=d;//

 

3、派生类对象的地址可以赋值给基类指针
base *pb=&d;

 

#include <iostream>
using namespace std;class base//基类
{
public:int n;base(int n) :n(i)//构造函数初始化列表cout << "base" << n << "constructed" << endl;~base()//析构函数{cout << "base" << n << "destructed" << endl;}
};class derived :public base//儿子辈类
{
public:derived(int i) :base(i)//初始化列表,先调用基类构造函数base初始化i{cout << "derived constructed" << endl;}~derived()//析构函数{cout << "derived destructed" << endl;}
};class morederived :public derived//孙子辈类,只列出直接上层类
{
public:morederived() :derived(4){cout << "morederived constructed" << endl;}~morederived()//析构函数{cout << "morederived destructed" << endl;}
};int main()
{morederived obj;return 0;
}

 

这篇关于C++程序设计视频北大31-35(继承和派生)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/929309

相关文章

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�