继承.如何做一个孩子=父母
Inheritance. How to make a child = parent
首先,我不太确定如何给我的问题命名。
我有一个关于继承的问题。
假设我创建了一个名为Class_A的类:
class Class_A
{
public:
int a;
int b;
};
然后,创建继承Class_A的Class_B:
class Class_B : public Class_A
{
public:
int c;
int d;
}
然后创建一个Class_B的实例:
Class_B my_class_b;
现在,我有一个函数,它接受一个Class_A的实例,修改它,然后返回一个Class_A:
Class_A func (Class_A which)
{
which.a += 20;
which.b -= 20;
return which;
}
我想要完成的是,我想要能够传递任何Class_A到函数中,然后将更改赋值给传递给它的任何内容。
我试过了:
Class_A temp = func (my_class_b);
my_class_b = temp;
将my_class_b传递给Class_A可以,但将其赋值给my_class_b不行。
我得到a:
no match for 'operator=' in 'my_class_b = temp'
做这件事的最好方法是什么?谢谢你的帮助。
change function to:
void func (Class_A& which)
{
which.a += 20;
which.b -= 20;
}
,像
一样使用func(my_class_b);
一种方法是:必须重载Class_b中的操作符来复制Class_a的值。第二种方法是:使用static_cast (temp),但这种方法并不总是安全的。
没有唯一最好的方法。
当用B
类的对象调用func
时,该对象首先被转换为A
类型(所谓的切片问题),这可能已经是不可接受的。因此,修复代码的一种方法是修复使用func
函数的方式。
例如,将其设为public虚成员函数:
class Class_A
{
public:
virtual void func() {...}
...
}
my_class_b.func(); // instead of Class_A temp = func (my_class_b); my_class_b = temp;
另一种方法:让func
修改一个现有对象,而不是创建一个新对象:
void func(A& object) {...}
...
func(my_class_b); // instead of Class_A temp = func (my_class_b); my_class_b = temp;
如果您想使用赋值语法,并且您确信切片对您的代码来说不是问题(不太可能),您可以为class B
定义一个赋值操作符:
class B {
B& operator=(A object) {a = object.a; b = object.b; return *this;}
...
}
或者(更好)添加一种从A
构造B
的方法:
class B {
B(A object): A(object), c(0), d(0) {}
...
}
相关文章:
- 更改"child's parent's style sheet"时如何将孩子的样式表重置为 Qt 默认样式表?
- 为什么 isVisible 在 QWidget 孩子中不起作用
- OOP使用不同的结构与孩子一起构建建议
- 尝试应用肖恩父母谈话"inheritance is the base class of evil"中的模式
- C 从子线中杀死所有父母的孩子
- 为什么父母的方法在孩子被摧毁后仍然存在
- 破坏的父母和孩子的顺序
- 将PID从孩子转移到父母
- 在我关闭刚开始的孩子对话框并进入父母对话框之后,我的QT桌面应用程序不断崩溃
- 如果孩子不需要父母班级的所有受保护成员,这是不好的班级设计吗?
- 有什么方法可以将指针指向孩子范围内的父母(派生)班级
- 当孩子为模板时,请从父母致电子方法
- C 引用抽象父母中继承的孩子
- 多个孩子的pid脱离了同一个父母
- 继承.如何做一个孩子=父母
- 什么类型的Cast从父母到孩子
- 回收父母作为孩子在那里
- 我是否必须破坏孩子的任务,或者是父母的照顾
- C++从父母的载体中调用孩子的方法?
- QTreeView:检查父母后如何检查孩子