015_linuxC++之_覆写

C++成员函数重载、覆盖与隐藏解析
本文详细解析了C++中类成员函数的重载、覆盖与隐藏的区别,包括各自的定义、特征及示例代码。通过具体场景说明了函数在不同情况下的行为差异,有助于理解C++多态性。

34.类成员函数的重载、覆盖和隐藏区别?
答案:
a.成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
b.覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

(一)覆写:就是子类继承父类,但是子类和父类中都有同样的函数,程序调用的是子类中的函数

#include <iostream>
using namespace std;
class Father{
public:
    void is_kill(void){
        cout<<"father's it skill"<<endl;
    }
};

class Son_public:public Father{
public:
    void is_kill(void){
        cout<<"Son's it skill"<<endl;
    }
    
};

int main(int argc, char **argv)

{
    Son_public S;
    S.is_kill();
}

运行结果
在这里插入图片描述
在这里插入图片描述

(gdb) bt #0 lv_obj_get_ext_draw_size (obj=obj@entry=0x0) at /home/xiejikai/24q3/torchlight/build_dir/target-arm-openwrt-linux-uclibcgnueabihf/nvrgui_lvgl/lvgl/src/core/lv_obj_draw.c:313 #1 0x0004f490 in lv_obj_invalidate (obj=obj@entry=0x0) at /home/xiejikai/24q3/torchlight/build_dir/target-arm-openwrt-linux-uclibcgnueabihf/nvrgui_lvgl/lvgl/src/core/lv_obj_pos.c:847 #2 0x0002fc50 in lv_label_set_text (obj=0x0, text=0xbeeca03c "2025-11-12") at /home/xiejikai/24q3/torchlight/build_dir/target-arm-openwrt-linux-uclibcgnueabihf/nvrgui_lvgl/lvgl/src/widgets/label/lv_label.c:147 #3 0x000c9ebe in tp_lv_time_picker_set_show_time_only (obj=0x4dfd4c <work_mem_int+2506536>, time=<optimized out>) at TpTimePicker.c:341 #4 0x0014d274 in update_time_str_label (obj=obj@entry=0x460324 <work_mem_int+1983744>) at PlaybackBar.c:3961 #5 0x001514b4 in tp_lv_timebar_event_cb (class_p=<optimized out>, e=<optimized out>) at PlaybackBar.c:2268 #6 tp_lv_timebar_event_cb (class_p=<optimized out>, e=<optimized out>) at PlaybackBar.c:2216 #7 0x000481cc in lv_obj_event_base (class_p=<optimized out>, e=e@entry=0xbeeca2ac) at /home/xiejikai/24q3/torchlight/build_dir/target-arm-openwrt-linux-uclibcgnueabihf/nvrgui_lvgl/lvgl/src/core/lv_obj_event.c:89 #8 0x00048242 in event_send_core (e=e@entry=0xbeeca2ac) at /home/xiejikai/24q3/torchlight/build_dir/target-arm-openwrt-linux-uclibcgnueabihf/nvrgui_lvgl/lvgl/src/core/lv_obj_event.c:364 #9 0x0004833e in lv_obj_send_event (obj=<optimized out>, event_code=<optimized out>, param=param@entry=0x0) at /home/xiejikai/24q3/torchlight/build_dir/target-arm-openwrt-linux-uclibcgnueabihf/nvrgui_lvgl/lvgl/src/core/lv_obj_event.c:67 #10 0x001edc4c in playbackimp_chn_list_change_task_cb (task=<optimized out>) at PlaybackImp.c:689 #11 0x001a53cc in async_task_finish_process (arg=0x3d3bb8 <work_mem_int+1408404>) at TpAsyncTaskQueue.c:994 #12 0x001c45e2 in tp_sync_timer (timer=<optimized out>) at AppInit.c:757 #13 0x0003fadc in lv_timer_exec (timer=0x3aff24 <work_mem_int+1261824>) at /home/xiejikai/24q3/torchlight/build_dir/target-arm-openwrt-linux-uclibcgnueabihf/nvrgui_lvgl/lvgl/src/misc/lv_timer.c:326 #14 lv_timer_handler () at /home/xiejikai/24q3/torchlight/build_dir/target-arm-openwrt-linux-uclibcgnueabihf/nvrgui_lvgl/lvgl/src/misc/lv_timer.c:107 #15 lv_timer_handler () at /home/xiejikai/24q3/torchlight/build_dir/target-arm-openwrt-linux-uclibcgnueabihf/nvrgui_lvgl/lvgl/src/misc/lv_timer.c:63 #16 0x00015758 in main () at /home/xiejikai/24q3/torchlight/build_dir/target-arm-openwrt-linux-uclibcgnueabihf/nvrgui_lvgl/main.c:75 (gdb) p *(tp_lv_time_picker_t *)0x4dfd4c $10 = {obj = {class_p = 0x27be24 <work_mem_int>, parent = 0x27be24 <work_mem_int>, spec_attr = 0x0, styles = 0x0, style_main_prop_is_set = 2611476, style_other_prop_is_set = 56, user_data = 0x0, id = 0x0, coords = {x1 = 391857407, y1 = 0, x2 = 16777215, y2 = 0}, flags = -16777216, state = 64836, layout_inv = 1, readjust_scroll_after_layout = 0, scr_layout_inv = 1, skip_trans = 1, style_cnt = 4, h_layout = 0, w_layout = 0, is_deleting = 0}, ta = 0x57, popup = 0x3d72d0 <work_mem_int+1422508>, header = 0x1, year_label = 0x717, month_label = 0x3de, calendar = 0x739, time_cont = 0x3e8, hms_selector = 0x717, footer = 0x3de, year_picker = 0x739, month_picker = 0x3e8, hms_picker = 0x0, show_label = 0x0, icon = 0x0, showed_date = {year = 0, month = 0 '\000', day = 0 '\000'}, selected_date = {year = 812, month = 0 '\000', day = 0 '\000'}, origin_date = {year = 0, month = 0 '\000', day = 0 '\000'}, clicked_date = {year = 0, month = 0 '\000', day = 0 '\000'}, date_format = 1079, hour_format = (TP_HOUR_FORMAT_12 | unknown: 2), hour = 224 '\340', minute = 253 '\375', second = 77 'M', origin_hour = 224 '\340', origin_minute = 253 '\375', origin_second = 77 'M', am_pm = 77 'M', content_cont = 0x3b, year_grid_btn = {0x430384 <work_mem_int+1787232>, 0x27be24 <work_mem_int>, 0x0, 0x0, 0x27d914 <work_mem_int+6896>, 0x38, 0x0, 0x0, 0x175b44ff, 0x0, 0xffffff <work_mem_int+14172635>, 0x0}, month_grid_btn = {0xff000000, 0x4dfd44 <work_mem_int+2506528>, 0x57, 0x3c3ce0 <work_mem_int+1343164>, 0x1, 0x48f, 0x3de, 0x48f, 0x3e8, 0x48f, 0x3de, 0x48f}, is_calendar = 232} (gdb) p tp_timebar $11 = (tp_lv_timebar_t *) 0x460324 <work_mem_int+1983744> (gdb) p g_playback_timebar_obj $12 = (lv_obj_t *) 0x460324 <work_mem_int+1983744> (gdb) p (tp_lv_timebar_t *) 0x460324 $13 = (tp_lv_timebar_t *) 0x460324 <work_mem_int+1983744> (gdb) p *(tp_lv_timebar_t *) 0x460324 $14 = {obj = {class_p = 0x23fd60 <tp_lv_timebar_class>, parent = 0x420dd8 <work_mem_int+1724340>, spec_attr = 0x3daba8 <work_mem_int+1437060>, styles = 0x3c6ff4 <work_mem_int+1356240>, style_main_prop_is_set = 65551, style_other_prop_is_set = 0, user_data = 0x606f50 <work_mem_int+3715372>, id = 0x971, coords = {x1 = 280, y1 = 864, x2 = 1919, y2 = 1079}, flags = 64358, state = 0, layout_inv = 0, readjust_scroll_after_layout = 0, scr_layout_inv = 0, skip_trans = 0, style_cnt = 1, h_layout = 0, w_layout = 0, is_deleting = 0}, ctrl_obj = 0x3dab6c <work_mem_int+1437000>, chn_name_obj = 0x3cc31c <work_mem_int+1377528>, video_info_obj = 0x3cc224 <work_mem_int+1377280>, bottom_ctrl_obj = 0x3e2ee8 <work_mem_int+1470660>, play_obj = 0x3d56a8 <work_mem_int+1415300>, single_frame_obj = 0x3d57e0 <work_mem_int+1415612>, speed_obj = 0x4449bc <work_mem_int+1870744>, smartspeed_obj = 0x4b7560 <work_mem_int+2340668>, cut_obj = 0x4810d4 <work_mem_int+2118320>, export_obj = 0x4f30d4 <work_mem_int+2585264>, export_label_obj = 0x52bcf8 <work_mem_int+2817748>, scale_obj = 0x42b620 <work_mem_int+1767420>, people_obj = 0x46771c <work_mem_int+2013432>, vehicle_obj = 0x46788c <work_mem_int+2013800>, pet_obj = 0x4679bc <work_mem_int+2014104>, cut_begin_obj = 0x0, cut_end_obj = 0x0, b30_obj = 0x42a540 <work_mem_int+1763100>, calendar_obj = 0x4dfd4c <work_mem_int+2506536>, f30_obj = 0x3d4f8c <work_mem_int+1413480>, hq_obj = 0x467acc <work_mem_int+2014376>, audio_obj = 0x42a260 <work_mem_int+1762364>, zoom_obj = 0x425244 <work_mem_int+1741856>, screennum_obj = 0x0, fullscreen_obj = 0x3cc104 <work_mem_int+1376992>, save_clip_btn_obj = 0x0, continuous_rec_obj = 0x3e2f7c <work_mem_int+1470808>, event_rec_obj = 0x463448 <work_mem_int+1996324>, expend_obj = 0x4dec60 <work_mem_int+2502204>, clear_obj = 0x3e3378 <work_mem_int+1471828>, tip_label = 0x0, play_state = 0, scale_select_idx = 0, scale_idx = 28, scale = 1440, start_time = 1762833600, cur_time = 1762876800, disp_time_gap = 120, time_clip = 12, pressing = 0, volume_val = 0, speed_index = 4, scrollbar_pos = 0, hq_index = 0, pressed_point = {x = 0, y = 0}, last_point = {x = 0, y = 0}, disp_time_label = {0x429158 <work_mem_int+1758004>, 0x429250 <work_mem_int+1758252>, 0x429348 <work_mem_int+1758500>, 0x429444 <work_mem_int+1758752>, 0x466338 <work_mem_int+2008340>, 0x46640c <work_mem_int+2008552>, 0x466514 <work_mem_int+2008816>, 0x466610 <work_mem_int+2009068>, 0x46670c <work_mem_int+2009320>, 0x46680c <work_mem_int+2009576>, 0x478364 <work_mem_int+2082112>, 0x47843c <work_mem_int+2082328>, 0x478538 <work_mem_int+2082580>, 0x478638 <work_mem_int+2082836>, 0x47873c <work_mem_int+2083096>, 0x478838 <work_mem_int+2083348>}, hover_time_obj = 0x462d38 <work_mem_int+1994516>, chn_label = {0x3cc3c8 <work_mem_int+1377700>, 0x3cc500 <work_mem_int+1378012>, 0x3cc5f8 <work_mem_int+1378260>, 0x42905c <work_mem_int+1757752>}, scrollbar_obj = 0x4def7c <work_mem_int+2503000>, show_scrollbar = 1, chn_num = 8, show_chn_idx = 0, expend = 1, mode = 0, stop_update_time = 0, cur_chn = 0, full_show = 0, export_slice_num = 0, cut_setting_time = 0, left_cut_bar_hoverd = false, right_cut_bar_hoverd = false, left_cut_bar_area = {x1 = 0, y1 = 0, x2 = 0, y2 = 0}, right_cut_bar_area = {x1 = 0, y1 = 0, x2 = 0, y2 = 0}} (gdb) p tp_timebar $15 = (tp_lv_timebar_t *) 0x460324 <work_mem_int+1983744> (gdb) p tp_timebar->ctrl_obj $16 = (lv_obj_t *) 0x3dab6c <work_mem_int+1437000> (gdb) p *(lv_obj_t *) A syntax error in expression, near `'. (gdb) p *(lv_obj_t *) A syntax error in expression, near `'. (gdb) p *(lv_obj_t *)0x460324 $17 = {class_p = 0x23fd60 <tp_lv_timebar_class>, parent = 0x420dd8 <work_mem_int+1724340>, spec_attr = 0x3daba8 <work_mem_int+1437060>, styles = 0x3c6ff4 <work_mem_int+1356240>, style_main_prop_is_set = 65551, style_other_prop_is_set = 0, user_data = 0x606f50 <work_mem_int+3715372>, id = 0x971, coords = {x1 = 280, y1 = 864, x2 = 1919, y2 = 1079}, flags = 64358, state = 0, layout_inv = 0, readjust_scroll_after_layout = 0, scr_layout_inv = 0, skip_trans = 0, style_cnt = 1, h_layout = 0, w_layout = 0, is_deleting = 0} (gdb) p *(lv_obj_t *) 0x3dab6c $18 = {class_p = 0x21e488 <lv_obj_class>, parent = 0x460324 <work_mem_int+1983744>, spec_attr = 0x3dac98 <work_mem_int+1437300>, styles = 0x3dabe8 <work_mem_int+1437124>, style_main_prop_is_set = 232015, style_other_prop_is_set = 4111, user_data = 0x0, id = 0x1c42aa <tp_lv_muti_dropdown_set_select+18>, coords = {x1 = 280, y1 = 864, x2 = 1903, y2 = 918}, flags = 64358, state = 0, layout_inv = 0, readjust_scroll_after_layout = 0, scr_layout_inv = 0, skip_trans = 0, style_cnt = 4, h_layout = 1, w_layout = 1, is_deleting = 0} (gdb) f 5 #5 0x001514b4 in tp_lv_timebar_event_cb (class_p=<optimized out>, e=<optimized out>) at PlaybackBar.c:2268 2268 update_time_str_label(obj); (gdb) tp_timebar->chn_num Undefined command: "tp_timebar->chn_num". Try "help". (gdb) p tp_timebar->chn_num $19 = 8 (gdb) p tp_timebar->calendar_obj $20 = (lv_obj_t *) 0x4dfd4c <work_mem_int+2506536> (gdb) p *(lv_obj_t *) 0x4dfd4c $21 = {class_p = 0x27be24 <work_mem_int>, parent = 0x27be24 <work_mem_int>, spec_attr = 0x0, styles = 0x0, style_main_prop_is_set = 2611476, style_other_prop_is_set = 56, user_data = 0x0, id = 0x0, coords = {x1 = 391857407, y1 = 0, x2 = 16777215, y2 = 0}, flags = -16777216, state = 64836, layout_inv = 1, readjust_scroll_after_layout = 0, scr_layout_inv = 1, skip_trans = 1, style_cnt = 4, h_layout = 0, w_layout = 0, is_deleting = 0} (gdb) p *(lv_obj_t *)0x27be24 $22 = {class_p = 0x0, parent = 0x0, spec_attr = 0x4deff8 <work_mem_int+2503124>, styles = 0x3cc4d8 <work_mem_int+1377972>, style_main_prop_is_set = 1050623, style_other_prop_is_set = 3271562920, user_data = 0xf399dbff, id = 0x35c7bdff, coords = {x1 = -1589395569, y1 = 1596, x2 = 385884183, y2 = 604013289}, flags = 8200, state = 129, layout_inv = 1, readjust_scroll_after_layout = 0, scr_layout_inv = 0, skip_trans = 0, style_cnt = 0, h_layout = 0, w_layout = 0, is_deleting = 0} (gdb) x/16xw 0x4dfd4c 0x4dfd4c <work_mem_int.12761+2506536>: 0x0027be24 0x0027be24 0x00000000 0x00000000 0x4dfd5c <work_mem_int.12761+2506552>: 0x0027d914 0x00000038 0x00000000 0x00000000 0x4dfd6c <work_mem_int.12761+2506568>: 0x175b44ff 0x00000000 0x00ffffff 0x00000000 0x4dfd7c <work_mem_int.12761+2506584>: 0xff000000 0x004dfd44 0x00000057 0x003d72d0 帮我分析上述调用栈
11-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值