Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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++编程中虚函数处理的问题。我有这样的想法: template<class T> class baseClass { virtual void doSomething(T& t) { // some baseClass specific code } void doSomethingElse(T& t) { // some baseClass specific code this->doSomething(t); } } template<class T> class subClass { virtual void doSomething(T&) { // some subclass related code } } 模板 类基类 { 虚拟空隙剂量测量(T&T){ //一些特定于基类的代码 } 无效剂量Thingelse(T&T){ //一些特定于基类的代码 这->剂量测定(t); } } 模板 类子类 { 虚空剂量测定法(T&){ //一些与子类相关的代码 } }_C++_Function_Virtual - Fatal编程技术网

从基类特定函数调用子类方法 我有一个关于C++编程中虚函数处理的问题。我有这样的想法: template<class T> class baseClass { virtual void doSomething(T& t) { // some baseClass specific code } void doSomethingElse(T& t) { // some baseClass specific code this->doSomething(t); } } template<class T> class subClass { virtual void doSomething(T&) { // some subclass related code } } 模板 类基类 { 虚拟空隙剂量测量(T&T){ //一些特定于基类的代码 } 无效剂量Thingelse(T&T){ //一些特定于基类的代码 这->剂量测定(t); } } 模板 类子类 { 虚空剂量测定法(T&){ //一些与子类相关的代码 } }

从基类特定函数调用子类方法 我有一个关于C++编程中虚函数处理的问题。我有这样的想法: template<class T> class baseClass { virtual void doSomething(T& t) { // some baseClass specific code } void doSomethingElse(T& t) { // some baseClass specific code this->doSomething(t); } } template<class T> class subClass { virtual void doSomething(T&) { // some subclass related code } } 模板 类基类 { 虚拟空隙剂量测量(T&T){ //一些特定于基类的代码 } 无效剂量Thingelse(T&T){ //一些特定于基类的代码 这->剂量测定(t); } } 模板 类子类 { 虚空剂量测定法(T&){ //一些与子类相关的代码 } },c++,function,virtual,C++,Function,Virtual,现在,如果我构造一个subClass类型的对象 int main(int argc, char *argv[]) { subClass<anyType> * subClassObject = new subClass<anyType>(); subClassObject->doSomethingElse(anyTypeObject); } intmain(intargc,char*argv[]) { 子类*子类对象=新的子类(); 子对象->doS

现在,如果我构造一个subClass类型的对象

int main(int argc, char *argv[])
{
    subClass<anyType> * subClassObject = new subClass<anyType>();
    subClassObject->doSomethingElse(anyTypeObject);
}
intmain(intargc,char*argv[])
{
子类*子类对象=新的子类();
子对象->doSomethingElse(anyTypeObject);
}
。。。。并调用基类的
doSomethingElse
方法,此方法将调用基类而不是子类的
doSomething
方法

我想要的是调用子类的
doSomething
方法(而不是
基类的方法)


有谁能告诉我如何做到这一点吗?

您可以通过以下方式来实现:

模板
类基类
{    
无效剂量Thingelse(T&T){
//一些特定于基类的代码
静态铸造(本)->剂量测定(t);
}
}
模板
类子类:公共基类
{
无效剂量(T&){
//一些与子类相关的代码
}
}

有关虚拟模板方法的讨论,请参见,您可以通过以下方式完成:

模板
类基类
{    
无效剂量Thingelse(T&T){
//一些特定于基类的代码
静态铸造(本)->剂量测定(t);
}
}
模板
类子类:公共基类
{
无效剂量(T&){
//一些与子类相关的代码
}
}

有关虚拟模板方法的讨论,请参见

我对您的代码进行了一些更改,以使其能够编译,而在g++4.5中,它表示正在调用子类方法。以下是我编译的代码:

#include <iostream>

template<class T>
class baseClass
{
public:
    virtual void doSomething(T& t) {
        std::cout << "Base" << std::endl;
        // some baseClass specific code
    }

    void doSomethingElse(T& t) {
        // some baseClass specific code

        this->doSomething(t);
    }
};

template<class T>
class subClass : public baseClass<T>
{
    virtual void doSomething(T&) {
        std::cout << "Child" << std::endl;
        // some subclass related code
    }
};

int main()
{
    typedef int anyType;

    subClass<anyType> * subClassObject = new subClass<anyType>();
    int foo;
    subClassObject->doSomethingElse(foo);
}
#包括
模板
类基类
{
公众:
虚拟空隙剂量测量(T&T){

std::cout我对您的代码做了几处更改以使其能够编译,并且使用g++4.5它表示正在调用子类方法。下面是我编译的代码:

#include <iostream>

template<class T>
class baseClass
{
public:
    virtual void doSomething(T& t) {
        std::cout << "Base" << std::endl;
        // some baseClass specific code
    }

    void doSomethingElse(T& t) {
        // some baseClass specific code

        this->doSomething(t);
    }
};

template<class T>
class subClass : public baseClass<T>
{
    virtual void doSomething(T&) {
        std::cout << "Child" << std::endl;
        // some subclass related code
    }
};

int main()
{
    typedef int anyType;

    subClass<anyType> * subClassObject = new subClass<anyType>();
    int foo;
    subClassObject->doSomethingElse(foo);
}
#包括
模板
类基类
{
公众:
虚拟空隙剂量测量(T&T){

感谢您的支持!如果我不必将这些函数虚拟化,只需通过子类重写doSomething,doSomethingElse会调用基类或子类的doSomething吗?请注意。在我的变体中,您不会重写子类中的doSomething。基类不再有doSomething。baseClass::doSomethingElse完全可以通过普通的非虚拟调用调用任何成员。我明白了!谢谢你的支持。似乎是一个不错的选择。谢谢你的支持!如果我不必将这些函数虚拟化,只需通过子类重写doSomething,doSomethingElse会调用基类或子类的doSomething吗?请注意。在我的var中iant在子类中不重写doSomething。基类不再有doSomething。基类::doSomethingElse可以通过普通的非虚拟调用调用任何成员。我得到了你!感谢你的支持。这似乎是一个不错的选择。这段代码是如何编译的?
子类
基类
无关,也不需要拥有一个
doSomethingElse
方法。该代码如何编译?
子类
基类
无关,也没有
doSomethingElse
方法。