《C++捷径教程》读书笔记--Chapter 14--继承(完结)

C++捷径教程(第3版,Herbert Schildt).pdf 立即下载

//--《C++捷径教程》读书笔记--Chapter 14--继承(完结)
//--Chapter 14--继承
//--04/14/2006 Friday
//--Computer Lab
//--Liwei

 

//--程序#1  说明继承的使用
#include <iostream>
using namespace std;

class road_vehicle{
 int wheels;
 int passengers;
public:
 void set_wheels(int num) { wheels=num; }
 int get_wheels() { return wheels; }
 void set_pass(int num) { passengers=num; }
 int get_pass() { return passengers;}
};

class truck: public road_vehicle{
 int cargo;
public:
 void set_cargo(int size) { cargo=size; }
 int get_cargo() { return cargo; }
 void show();
};

//-----
enum type { car, van, wagon};

class automobile:public road_vehicle{
 enum type car_type;
public:
 void set_type( type t) { car_type=t; }// this
    enum type get_type() { return car_type; }
 void show();
};

void truck::show()
{
 cout<<"Wheels: "<<get_wheels()<<'/n';
 cout<<"Passengers: "<<get_pass()<<'/n';
 cout<<"Cargo capacity in cubic feet: "<<cargo<<'/n';
 //---
}

void automobile::show()
{
 cout<<"Wheels: "<<get_wheels()<<'/n';
 cout<<"Passengers: "<<get_pass()<<'/n';
 cout<<"type: ";
 
 switch( get_type() ){
 case van: cout<<"van./n";
  break;
 case car: cout<<"car./n";
  break;
 case wagon: cout<<"wagon./n";
 }
}

int main()
{
 truck t1,t2;
 automobile c;

 t1.set_wheels(18);
 t1.set_pass(2);
 t1.set_cargo(3200);

 t2.set_wheels(6);
 t2.set_pass(3);
 t2.set_cargo(1200);

 t1.show();
 cout<<endl;
 t2.show();
 cout<<endl;

 c.set_wheels(4);
 c.set_pass(6);
 c.set_type(van);

 c.show();

 return 0;
}


//=================================================================//
//                              END                                //
//=================================================================//

//--程序#2
#include <iostream>
using namespace std;

class base{
 int i,j;
public:
 void set(int a, int b) { i=a; j=b;}
 void show() { cout<<i<<' '<<j<<'/n'; }
};

class derived:public base{
 int k;
public:
 derived(int x) { k=x; }
 void showk() { cout<<k<<'/n'; }
};

int main()
{
 derived ob(3);
 
 ob.set(1,2);
 ob.show();

 ob.showk();

 return 0;
} 


//=================================================================//
//                              END                                //
//=================================================================//
//--程序#3
#include <iostream>
using namespace std;

class base{
 int i,j;
public:
 void set(int a, int b) { i=a; j=b;}
 void show() { cout<<i<<' '<<j<<'/n'; }
};

class derived:private base{
 int k;
public:
 derived(int x) { k=x; }
 void showk() { cout<<k<<'/n'; }
};

int main()
{
 derived ob(3);
 
// ob.set(1,2);
// ob.show();

 ob.showk();

 return 0;
} 


//=================================================================//
//                              END                                //
//=================================================================//
//--程序#4
#include <iostream>
using namespace std;

class base{
protected:
 int i,j;
public:
 void set(int a, int b) { i=a; j=b;}
 void show() { cout<<i<<' '<<j<<'/n'; }
};

class derived:public base{
 int k;
public:
 void setk() { k=i*j; }
 void showk() { cout<<k<<'/n'; }
};

int main()
{
 derived ob;
 
 ob.set(2,3);
 ob.show();

 ob.setk();
 ob.showk();

 return 0;
} 


//=================================================================//
//                              END                                //
//=================================================================//
//--程序#5
#include <iostream>
using namespace std;

class base{
protected:
 int i,j;
public:
 void set(int a, int b) { i=a; j=b;}
 void show() { cout<<i<<' '<<j<<'/n'; }
};

class derived1:public base{
 int k;
public:
 void setk() { k=i*j; }
 void showk() { cout<<k<<'/n'; }
};

class derived2:public derived1{
 int m;
public:
 void setm() { m=i-j; }
 void showm() { cout<<m<<'/n'; }
};

int main()
{
 derived1 ob1;
 derived2 ob2;

 ob1.set(2,3);
 ob1.show();
 ob1.setk();
 ob1.showk();

 ob2.set(3,4);
 ob2.show();
 ob2.setk();
 ob2.showk();
 ob2.setm();
 ob2.showm();

 return 0;
} 


//=================================================================//
//                              END                                //
//=================================================================//
//--程序#6
#include <iostream>
using namespace std;

class base{
protected:
 int i,j;
public:
 void set(int a, int b) { i=a; j=b;}
 void show() { cout<<i<<' '<<j<<'/n'; }
};

class derived1:private base{
 int k;
public:
 void setk() { k=i*j; }
 void showk() { cout<<k<<'/n'; }
};

class derived2:public derived1{
 int m;
public:
// void setm() { m=i-j; }
 void showm() { cout<<m<<'/n'; }
};

int main()
{
 derived1 ob1;
 derived2 ob2;

 ob1.set(1,2);
 ob1.show();
   
 ob2.set(3,4);
 ob2.show();

 return 0;
} 


//=================================================================//
//                              END                                //
//=================================================================//

//--程序#7  说明以保护方式继承
#include <iostream>
using namespace std;

class base{
 int i;
protected:
 int j;
public:
 int k;
 void seti(int a) { i=a; }
 int geti() { return i; }
};

class derived: protected base{
public:
 void setj(int a) { j=a; }
 void setk(int a) { k=a; }
 int getj() { return j;}
 int getk() { return k; }
};


int main()
{
 derived ob;

// ob.seti(10);
// cout<<ob.geti();
// ob.k=11;

 ob.setk(10);
 cout<<ob.getk()<<' ';

 ob.setj(12);
 cout<<ob.getj()<<' ';

 cout<<endl;

 return 0;
}


//=================================================================//
//                              END                                //
//=================================================================//
//--程序#8  说明多继承
#include <iostream>
using namespace std;

class base1{
protected:
 int x;
public:
 void showx() { cout<<x<<endl;}
};

class base2{
protected:
 int y;
public:
 void showy() { cout<<y<<endl; }
};

class derived: public base1,public base2{
public:
 void set(int i, int j) { x=i; y=j; }
};

int main()
{
 derived ob;

 ob.set(11,12);
 ob.showx();
 ob.showy();

 return 0;
}


//=================================================================//
//                              END                                //
//=================================================================//
//--程序#9  说明构造和析构
#include <iostream>
using namespace std;

class base{
//public:
protected:
 base() { cout<<"Constructing base./n"; }
 ~base() { cout<<"Destructing base./n"; }
};

class derived: public base {
public:
 derived() { cout<<"Constructing derived./n"; }
 ~derived() { cout<<"Destructing derived./n"; }
};

int main()
{
 derived ob;
 
 return 0;
}

//=================================================================//
//                              END                                //
//=================================================================//
//--程序#10  说明构造和析构
#include <iostream>
using namespace std;

class base{
public:
//protected:
 base() { cout<<"Constructing base./n"; }
 ~base() { cout<<"Destructing base./n"; }
};

class derived1: public base {
public:
 derived1() { cout<<"Constructing derived1./n"; }
 ~derived1() { cout<<"Destructing derived1./n"; }
};

class derived2: public derived1 {
public:
 derived2() { cout<<"Constructing derived2./n"; }
 ~derived2() { cout<<"Destructing derived2./n"; }
};


int main()
{
 derived2 ob;
 
 return 0;
}

//=================================================================//
//                              END                                //
//=================================================================//
//--程序#11  说明构造和析构
#include <iostream>
using namespace std;

class base1{
public:
//protected:
 base1() { cout<<"Constructing base1./n"; }
 ~base1() { cout<<"Destructing base1./n"; }
};

class base2{
public:
//protected:
 base2() { cout<<"Constructing base2./n"; }
 ~base2() { cout<<"Destructing base2./n"; }
};


class derived: public base1,public base2 {
public:
 derived() { cout<<"Constructing derived./n"; }
 ~derived() { cout<<"Destructing derived./n"; }
};

 

int main()
{
 derived ob;
 
 return 0;
}

//=================================================================//
//                              END                                //
//=================================================================//
//--程序#12  说明传递参数给基类
#include <iostream>
using namespace std;

class base{
protected:
 int i;
public:
//protected:
 base(int x) { i=x; cout<<"Constructing base./n"; }
 ~base() { cout<<"Destructing base./n"; }
};

class derived:public base{
 int j;
public:
 derived(int x, int y): base(y)
 { j=x; cout<<"Constructing derived./n"; }
 ~derived() { cout<<"Destructing derived./n"; }

 void show() { cout<<i<<' '<<j<<endl; }
};


int main()
{
 derived ob(3,4);
 
 ob.show();

 return 0;
}

//=================================================================//
//                              END                                //
//=================================================================//
//--程序#13  说明传递参数给基类
#include <iostream>
using namespace std;

class base1{
protected:
 int i;
public:
 base1(int x) { i=x; cout<<"Constructing base1./n"; }
 ~base1() { cout<<"Destructing base1./n"; }
};
//----

class base2{
protected:
 int k;
public:
 base2(int x) { k=x; cout<<"Constructing base2./n"; }
 ~base2() { cout<<"Destructing base2./n"; }
};
//----

class derived:public base1, public base2{
 int j;
public:
 derived(int x, int y, int z): base1(y),base2(z)
 { j=x; cout<<"Constructing derived./n"; }
 ~derived() { cout<<"Destructing derived./n";}
    void show() { cout<<" i:"<<i<<"/n j:"<<j<<"/n k:"<<k<<endl;}
};


int main()
{
 derived ob(3,4,5);
 
 ob.show();

 return 0;
}

//=================================================================//
//                              END                                //
//=================================================================//
//--程序#14  说明传递参数给基类
#include <iostream>
using namespace std;

class base1{
protected:
 int i;
public:
 base1(int x) { i=x; cout<<"Constructing base1./n"; }
 ~base1() { cout<<"Destructing base1./n"; }
};
//----

class base2{
protected:
 int k;
public:
 base2(int x) { k=x; cout<<"Constructing base2./n"; }
 ~base2() { cout<<"Destructing base2./n"; }
};
//----

class derived: public base1, public base2{
 int j;
public:
 derived(int y, int z): base1(y),base2(z)
 { j=y*z ;  cout<<"Constructing derived./n"; }
 ~derived() { cout<<"Destructing derived./n";}
    void show() { cout<<" i:"<<i<<"/n j:"<<j<<"/n k:"<<k<<endl;}
};


int main()
{
 derived ob(3,4);
 
 ob.show();

 return 0;
}

//=================================================================//
//                              END                                //
//=================================================================//
//--程序#15  说明访问声明
#include <iostream>
using namespace std;

class base{
 int i;
public:
 int j,k;
 void seti(int x) { i=x; }
 int geti() { return i; }
};

class derived: private base{
public:
 base::j;
 base::seti;
 base::geti;
// base::i;
 int a;
};

int main()
{
 derived ob;
 //ob.i=10;

 ob.j=20;
 ob.a=40;

 ob.seti(10);

 cout<<ob.geti()<<' '<<ob.j<<' '<<ob.a<<endl;

 return 0;

}

//=================================================================//
//                              END                                //
//=================================================================//
//--程序#16  说明虚基类
#include <iostream>
using namespace std;

class base{
public:
 int i;
};

class derived1: public base{
public:
 int j;
};

class derived2: public base{
public:
 int k;
};

class derived3: public derived1, public derived2{
public:
 int sum;
};

int main()
{
 derived3 ob;

// ob.i=10;
 ob.j=20;
 ob.k=30;

// ob.sum=ob.i+ob.j+ob.k;

// cout<<ob.i<<endl;
 cout<<ob.j<<' '<<ob.k<<endl;

// cout<<ob.sum<<endl;

}
//=================================================================//
//                              END                                //
//=================================================================//
//--程序#17  说明虚基类
#include <iostream>
using namespace std;

class base{
public:
 int i;
};

class derived1: public base{
public:
 int j;
};

class derived2: public base{
public:
 int k;
};

class derived3: public derived1, public derived2{
public:
 int sum;
};

int main()
{
 derived3 ob;

 ob.derived1::i=10;
 ob.j=20;
 ob.k=30;

 ob.sum=ob.derived1::i+ob.j+ob.k;

 cout<<ob.derived1::i<<endl;
 cout<<ob.j<<' '<<ob.k<<endl;

 cout<<ob.sum<<endl;

 cout<<"====================/n";

 ob.derived2::i=100;
 ob.sum=ob.derived2::i+ob.j+ob.k;

 cout<<ob.derived2::i<<endl;
 cout<<ob.j<<' '<<ob.k<<endl;

 cout<<ob.sum<<endl;


 return 0;
}
//=================================================================//
//                              END                                //
//=================================================================//
//--程序#18  说明虚基类
#include <iostream>
using namespace std;

class base{
public:
 int i;
};

class derived1: virtual public base{
public:
 int j;
};

class derived2: virtual public base{
public:
 int k;
};

class derived3: public derived1, public derived2{
public:
 int sum;
};

int main()
{
 derived3 ob;

 ob.i=10;
 ob.j=20;
 ob.k=30;

 ob.sum=ob.i+ob.j+ob.k;

 cout<<ob.i<<endl;
 cout<<ob.j<<' '<<ob.k<<endl;

 cout<<ob.sum<<endl;

 cout<<"====================/n";

    derived1 lw;
 lw.i=999;
 cout<<lw.i<<endl;
 cout<<ob.i<<endl;

 return 0;
}
//=================================================================//
//                              END                                //
//=================================================================//

手把手教你ensp仿真搭建校园网(含防火墙及无线网络)系列(三)校园无线网络AC+AP配置 本系列博客将带你从零开始,使用 华为 eNSP(Enterprise Network Simulation Platform) 仿真搭建一个完整的校园网络,涵盖 核心层、汇聚层、接入层、防火墙安全策略、无线AC+AP组网 等实战场景。无论你是网络初学者还是希望深化实战经验的工程师,都能通过本教程掌握企业级网络的规划、配置与排错技巧。 阅读详情

相关推荐

Win64 驱动内核编程-16.WFP网络监控驱动(防火墙)

WFP驱动监控网络 WFP是微软推出来替代TDIHOOK、NDISHOOK等拦截网络通信的方案,WFP的框架非常庞大,在RING3和RING0各有一套类似的函数,令人兴奋的是,即使在R3使用WFP,也可以做到全局拦截访问网络。由于WFP的范围太广,实在难以一言概括,感...

墨鱼菜鸡 1033

《C++捷径教程》目录

第1章 C++的发展历程 11.1 C++的起源 11.1.1 C的诞生 11.1.2 对C++的需求 31.1.3 C++的诞生 31.2 C++的发展 41.3 什么是面向对象程序设计 51.3.1 封装 51.3.2 多态 51.3.3 继承 61.3.4 C++实现OOP 61.3.5 C++与Java和C# 6第2章

网络空间安全与企业信息化 1433

为Codex添加任务完成提示音:提升开发效率的实用技巧

在自动化脚本开发和模型训练过程中,实时获取任务状态反馈是提升工作效率的关键。通过Hook机制,开发者可以在代码执行的关键节点注入自定义逻辑,实现各种自动化操作。Codex的Hook系统特别适合用于任务完成提醒,其post_execution节点能准确捕获执行结束事件。技术实现上,只需简单配置TOML文件并编写音频播放脚本,就能让系统在任务完成时自动播放提示音。这种声音反馈机制尤其适用于长时间运行的批量任务和模型训练场景,实测可提升30%以上的工作效率。结合动态音效选择和跨平台兼容方案,该技巧还能扩展为桌面通

weixin_26767391的博客 533

多年收集的VC++电子书,源代码现在免费全部奉献给大家

多年收集的VC++电子书,源代码现在免费全部奉献给大家 这里只列举了一点书籍和代码,我已经将电脑中全部资料上传到网址里面 !!!!!!!!!!!!全部免费!!!!!!!!!!!!!!!!!! 规范教程PDF,101条规则、准则与最佳实践.rar A1式精解(GoF_23种设计解析附C++实现源码).pdf C++ 设计新思维:范型编程与设计模式之应用(中文PDF ).pdf 深入解析A

冷月宫主的专栏 4650

FreeRTOS OTA实战:从Bootloader设计到安全升级的完整流程(附MQTT示例代码)

本文详细介绍了在FreeRTOS系统中实现安全OTA固件升级的完整流程。内容涵盖从Bootloader设计、存储分区规划到与MQTT协议集成的OTA Agent任务开发,并重点解析了固件签名验证、防回滚等关键安全机制,为嵌入式物联网设备提供了一套高可靠性的远程升级解决方案。

weixin_29248653的博客 159

playwright-mcp 安装使用的详细教程

Playwright MCP 快速入门指南 Playwright MCP Server 是由微软开发的浏览器自动化服务,通过 MCP 协议为 AI/Agent/LLM 提供网页交互能力。它基于可访问性树而非屏幕截图,支持多种浏览器和运行模式。 安装要求: Node.js v18+ 命令行操作能力 支持 MCP 的客户端 安装方式: 通过 npx 快速启动:npx @playwright/mcp@latest 项目依赖安装:npm install @playwright/mcp 主要特性: 支持 Chrome

上善若水 7985

《C++捷径教程》读书笔记--Chapter 1--C++的发展历史

//--《C++捷径教程》读书笔记--Chapter 1--C++的发展历史 //--Chapter 1--C++的发展历史//--10/31/2005//--Computer Lab//--Liwei《C++捷径教程》是有Herbert Schildt编著,聂雪军等编译的,有清华大学出版,今年5月我用了7元在旧货市场买来了一本,5-8间看了一些,来到长安大学后,每天晚上只有有时间就看看,现在就要

网络空间安全与企业信息化 1415

百度地图街景图像批量获取

由于个人研究需要在最近试了一下使用API获取百度地图街景图片,在此介绍一下基于我个人需求的百度街景批量获取方法,本文以Python编码作为主要方法,如果对零编码工具有需要的可以关注一下UA城市分析小组刚刚发布的街景图片获取工具。 街景图像用作区域细粒度空间指标测度需要解决几个问题。 1. 首先就是调用额度的限制,现在百度对于个人认证开发者每天可用的街景图像调用额度为100张,在不考虑购买额度上限(1万张600元,其实有经费的前提下可以直接考虑钞能力)的情况下动辄几千上万张的爬取数量会大大增加需要爬取的时间周

boycetoon29的博客 1万+

《C++捷径教程》读书笔记--Chapter 10--结构与联合

//--《C++捷径教程》读书笔记--Chapter 10--结构与联合//--Chapter 10--结构与联合//--11/24/2005 Thurs.//--Computer Lab//--Liwei//--程序#1  使用数组结构#include #include #include #include using namespace std;const int SIZE=10;struct

网络空间安全与企业信息化 1595

IC版图设计之OASIS文件格式详解

OASIS(Open Artwork System Interchange Standard)是继GDSII之后新一代的集成电路版图数据交换标准,由SEMI在2004年正式发布(SEMI标准号:SEMI P39)。高压缩率:相比GDSII可减少3-10倍文件体积扩展性强:支持纳米级工艺的复杂图形描述跨平台兼容:独立于EDA工具和操作系统安全增强:内置校验和与加密支持。

ZZcppc的博客 2440

【KingSCADA】如何建立硬件系统及相关变量

本篇主要讲解如何定义设备,如何定义变量。KingSCADA3.8的采集系统是指负责和现场设备进行通讯,并采集现场数据和控制现场数据的模块,称之为采集器,也叫IOServer应用,它是一组独立的应用程序,可以脱离KingSCADA3.8软件,它依赖于KingSCADA3.8驱动产品,通过驱动与IO设备进行通讯。采集系统由通讯链路,设备,数据块组成。链路:链路是指计算机通过什么方式(接口)与设备进行连接,链路类别:串口,以太网,GPRS,Modem,通信卡,采集卡,无链路。

做有价值的事,积累有价值的笔记! 1万+

C++开发人员必备:86本C++教程电子书下载

原文:http://club.topsage.com/thread-3148739-1-1.html 学习C++,既要会利用C++进行面向过程的结构化程序设计,也要会利用C++进行面向对象的程序设计。想学习C++吗,那你绝对不能错过这些最经典的C++教程电子书! 资料名称 下载地址 C语言范例开发大全【文字版PDF】 http://do

HappyJandun's 学习笔录 1万+

FPGA DDR3实战(四):DDR地址映射自动化测试(1)—— 测试程序设计与代码逻辑

本文介绍了一种DDR地址映射自动化测试方案,旨在提高板卡调试效率。方案通过AXI4协议实现主从端通信,构建了包含地址控制器和测试数据生成器的模块化架构。测试程序支持突发传输、状态监控和错误检测,可灵活配置测试参数。采用状态机控制流程,先写入递增数据再读取比对,完成功能验证和性能评估。该方案可系统化验证DDR的正确性、稳定性和可靠性,相比传统手动测试显著提升效率。

FPGA_小田老师的博客 1976

《C++捷径教程》读书笔记--Chapter 16--模板(完结)

//--《C++捷径教程》读书笔记--Chapter 16--模板(完结)//--Chapter 16--模板//--04/16/2006 Sun.//--Computer Lab//--Liwei //--程序#1  说明模板函数示例#include using namespace std;//template void swapargs(X &a, X &b)template

网络空间安全与企业信息化 1365

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

《C++捷径教程》学习笔记【一】:虚函数

声明虚函数的方法是在基类中的成员函数原型前加上关键字virtual.格式如下:    class 类名{    ……    virtual 类型 函数名(参数表);    ……    };    当一个类的成员函数声明为虚函数后,这就意味着该成员函数在派生类中可能有不同的实现,也就是说,该函数在派生类中可能需要定义与其基类虚函数原型相同的函数。    虚函数是动态联编的

极简Qt 1363

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

《C++捷径教程》读书笔记--Chapter 12--类的深入学习(完结)

//--《C++捷径教程》读书笔记--Chapter 12--类的深入学习(完结)//--Chapter 12--类的深入学习//--04/12/2006 Wed.//--Computer Lab//--Liwei //--程序#4  使用重载构造函数#include #include #include using namespace std;class timer{ int seco

网络空间安全与企业信息化 1226

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++ 一些知识点

https://www.nowcoder.com/profile/7838045/myFollowings/detail/3445247链接:https://www.nowcoder.com/questionTerminal/087006d1e4ff46ca927c812294facbc4来源:牛客网答案:D; 第一个printf:由于char***cpp,可以读成cpp为一个指向char*...

longlovefilm的博客 367

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 219

选型笔记:Type‑C 扩展坞方案评估|DP1.4 转 HDMI2.0 桥接芯片 GSV2201S@ACP

本文记录 GSV2201S 这款 DP1.4a 转 HDMI2.0 桥接芯片评估,梳理视频、HDCP、PD 集成能力,总结 Type‑C 转接 Dongle、扩展坞方案的适配边界,以及差分走线、PD 时序、HDCP 握手等高频调试问题,为 C 口视频转接方案选型提供参考。

ACP广源盛的博客 218

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 333

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 388

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析

蓝桥杯报名正在火热进行(软件赛报名 2026-10-08—12-18,省赛 2027-04-10),电子学会 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名也已开启(9/23—12/2),全国青少年信息素养大赛算法应用主题赛同步推进——把 LCA 这个模板练熟,正是冲刺这些赛事树型考点的关键一步。所谓「最近公共祖先」:在一棵以某个节点为根的树里,两个节点 u、v 向上追溯,最早交汇的那个祖先就叫它们的 LCA。比如家谱里,你和你表哥最近的共同长辈就是你们的祖父。

IT_Scratch的博客 534

【C语言】字符与字符串函数

C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。

记录在学习过程中学到的知识 343

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 377

C++ 函数模版

模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。

2501_94041724的博客 302

C++ 运行时多态与虚函数机制全面剖析【面试重点】

构成C++ 运行时多态必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且派生类必须对该虚函数完成重写/覆盖(Override)。只有基类的指针或引用才能既指向基类对象,又指向派生类对象(切片机制);而只有完成了虚函数重写,派生类与基类才具备不同的函数行为,达到“指向谁就调用谁”的效果。在类成员函数的前面加上virtual关键字修饰,该成员函数就成为了虚函数。public:// 成员函数前加 virtual 修饰,声明为虚函数。

Fuyo_0209的博客 435
上一篇: 《C++捷径教程》读书笔记--Chapter 13--运算符的重载(完结)
下一篇: 《C++捷径教程》读书笔记--Chapter 15--虚函数与多态(完结)
Micro_lee
博客等级 码龄22年 381粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值