调用子类方法而不强制转换对象

时间:2015-12-25 19:58:06

标签: c++ inheritance subclass

我的课程结构如下:

class A {
public:
     A();

     virtual void doSomething() {
         qDebug() << "Hello from class A";
     }
};

class B : public A {
public:
    B();

    void doSomething() {
        qDebug() << "Hello from class B";
    }
};

class C : public A {
public:
    C();

    void doSomething() {
        qDebug() << "Hello from class C";
    }
};

在其他地方我有这样的方法:

void doSomethingElse(const A argument = A()) {
    argument.doSomething();
}

每次调用doSomethingElse我都会得到A&#34;来自A&#34;输出,即使我传递一个B类或C类的实例作为参数。 我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

需要通过引用传递:

$.ajax({
        type: "POST",
        url: "phppage.php",
        dataType: "JSON",
        success: function(data) {
            $.each(data, function(key, value) {
                poi_marker = {
                     marker: {
                        lat: data.latitude,
                        lng: data.longitude,
                        }
                      } 
                }
                poi_markers.push(poi_marker);
            });

            map.addMarkers(poi_markers);
        }
    });

如果您不通过引用传递,则参数将成为参数的副本,并且仅复制参数的void doSomethingElse(const A& argument = A()) { argument.doSomething(); } 部分。然后在A上调用doSomething(),而不是最初作为参数传递的对象。