【发布时间】:2020-03-05 16:26:24
【问题描述】:
我正在用 C++ 做一件事,我正在制作抽象类 Parent 的对象,并在函数中将其初始化为子类。当我在创建对象时对其进行初始化时,一切都会产生奇迹。当我在一个函数中初始化它时,我得到一个分段错误。
这是我正在做的代码大纲
_class.h
#ifndef CLASS_H_INCLUDED
#define CLASS_H_INCLUDED
class Parent{
public:
virtual void foo() = 0;
};
class Child1 : public Parent{
public:
virtual void foo(){
...
}
};
class Child2 : public Parent{
public:
virtual void foo(){
...
}
};
#endif
main.cpp
#include <iostream>
using namespace std;
#include "main.h"
#include "_class.h"
void setChild(Parent* c){
c = new Child1();
}
int main() {
Parent* c;// = new Child1();
setChild(c);
c->foo(); //Seg Fault
}
显然我可以在 main 中初始化,但我宁愿在函数中初始化。这可能吗,如果是,我做错了什么?
【问题讨论】:
-
Parent* c通过引用(特别是通过指针)传递父级,但指针本身是按值传递的。c是调用者参数的副本,对副本所做的更改不会在调用者处复制。使用参考:void setChild(Parent* & c). -
将
Parent** p传递给setChild并将new Child1();的结果分配给*p。
标签: c++ class inheritance segmentation-fault