【发布时间】:2019-03-30 14:57:34
【问题描述】:
我是 C++ 初学者,我想更改将在此代码中调用的函数版本:
#include <iostream>
class C1 {};
class C2 : public C1 {};
void func(C1 var) {
std::cout << "Func 1" << std::endl;
}
void func(C2 var) {
std::cout << "Func 2" << std::endl;
}
int main() {
C1 *teste1 = new C1;
C1 *teste2 = new C2;
func(*teste1); // Want "Func 1"
func(*teste2); // Want "Func 2"
return 0;
}
从评论中可以看出,我想要的是当我取消引用指向 C2 类的指针时调用带有 C2 参数的 func。
编辑:只是为了澄清我真正想要实现的目标,下面的代码更接近我想要的:
#include <iostream>
#include <list>
class C1 {};
class C2 : public C1 {};
void func(C1 var) {
std::cout << "Func 1" << std::endl;
}
void func(C2 var) {
std::cout << "Func 2" << std::endl;
}
int main() {
std::list<C1*> teste;
teste.push_back(new C1);
teste.push_back(new C2);
// Want to print:
// Func 1
// Func 2
for(auto i: teste) {
func(*i);
}
return 0;
}
【问题讨论】:
-
美丽的MCVE 和一个精彩的第一个问题。欢迎来到 StackOverflow!我希望看到更多像这样的问题!
-
你介意在这里找到一些有用的东西 - en.cppreference.com/w/cpp/experimental/constraints C++20。
标签: c++ inheritance overloading