Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过构造函数设置子类属性:糟糕的做法?_C++_Oop_Inheritance - Fatal编程技术网

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'; }