C++ 通过构造函数设置子类属性:糟糕的做法?
我使用一个基类来声明主属性和函数,以操作我稍后将定义的一系列类的属性。我发现在子类中重新定义类变量实际上没有任何效果,已经定义了C++ 通过构造函数设置子类属性:糟糕的做法?,c++,oop,inheritance,C++,Oop,Inheritance,我使用一个基类来声明主属性和函数,以操作我稍后将定义的一系列类的属性。我发现在子类中重新定义类变量实际上没有任何效果,已经定义了set\u attribute()类型成员来设置值,如下所示 代码: 现在这是可行的,但我不确定这是否是最好的方法,或者这样使用类继承是否是一种好的实践。有人能给我点化一下吗?我不会说这是一种不好的做法,只是完全没有必要 原因是什么 char val = 'c'; 没有效果,因为您正在派生的中定义一个新的val,这将隐藏Base中的val。调用print\u val时
set\u attribute()
类型成员来设置值,如下所示
代码:
现在这是可行的,但我不确定这是否是最好的方法,或者这样使用类继承是否是一种好的实践。有人能给我点化一下吗?我不会说这是一种不好的做法,只是完全没有必要 原因是什么
char val = 'c';
没有效果,因为您正在派生的中定义一个新的val
,这将隐藏Base
中的val
。调用print\u val
时,它只会看到Base::val
,而不会看到Derived::val
。因此它会打印Base::val
您可以直接在派生的构造函数中更改Base::val
,而不是重新定义它:
Derived() { val = 'c'; }
你想解决的问题是什么?你的问题不清楚。因为它是受保护的,你可以只写val=derived\u val代码>在Derived::Derived()
中。一个字段如何是非静态的,并且可以从类定义中初始化,我在这里遗漏了什么吗?c11或c14中的默认值?@MiroRodozov C++11以及C++14中规则的进一步放宽。这里写得很好:@user4581301 10x人,现在清楚了。我是古人,不是语法错误……我不知道这是可能的。谢谢
char val = 'c';
Derived() { val = 'c'; }