从基类特定函数调用子类方法 我有一个关于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&){ //一些与子类相关的代码 } }
现在,如果我构造一个subClass类型的对象从基类特定函数调用子类方法 我有一个关于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
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
方法。