V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
emoji
V2EX  ›  程序员

c++类继承与 static 成员问题

  •  
  •   emoji · 2021-01-21 13:48:44 +08:00 · 1178 次点击
    这是一个创建于 1163 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想问的是,如果父类成员变量不是 static,而子类继承了之后希望将它们变成 static 修饰的,应该怎么做? 是不是直接重新把所有变量写一遍?还是有其他简单的方法? 如果把所有变量重新用 static 修饰一遍,那么这个操作会覆盖掉父类的对应变量,还是全新的变量? 谢谢解答。

    6 条回复    2021-01-21 15:09:51 +08:00
    wangxn
        1
    wangxn  
       2021-01-21 14:09:31 +08:00 via iPhone
    看你怎么定义覆盖。子类重新定义成员会隐藏( shadow )父类同名成员,但显式指定父类的名字还是能访问到父类的成员的,所以两者是共存的。
    这不是一个好的用法。
    nightwitch
        2
    nightwitch  
       2021-01-21 14:15:46 +08:00
    emoji
        3
    emoji  
    OP
       2021-01-21 14:16:22 +08:00
    @wangxn 感谢回复,那请问有没有子类同名 static 变量替换父类非 static 变量的方法呢?
    emoji
        4
    emoji  
    OP
       2021-01-21 14:20:01 +08:00
    @nightwitch 非常感谢,一目了然
    wamson
        5
    wamson  
       2021-01-21 14:42:34 +08:00
    请不要这样子做,code review 会被喷的。
    编译的时候,静态成员变量是放到全局区,普通成员变量是跟随类实例的,所以没有替换这一说法,只能子类重定向到新的静态变量,但是父类的同名变量还是会存在的。
    emoji
        6
    emoji  
    OP
       2021-01-21 15:09:51 +08:00
    @wamson 感谢指点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2836 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:56 · PVG 20:56 · LAX 05:56 · JFK 08:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.