有人可以解释以下代码的输出
char* a[] = {"ABC123", "DEF456", "GHI789"};
char **p = a;
cout<<++*p<<std::endl;
cout<<*p++<<std::endl;
cout<<++*p<<std::endl;
Run Code Online (Sandbox Code Playgroud)
输出:
BC123
BC123
EF456
Run Code Online (Sandbox Code Playgroud)
令我困惑的是++*p和*p ++的不同行为.我期待输出为:
ABC123
DEF456
GHI789
Run Code Online (Sandbox Code Playgroud) class base
{
public:
void virtual func(){cout<<"base";}
void check()
{
func();
}
};
class derived: public base
{
public:
void func(){cout<<"dervied";}
};
int main()
{
base *obj = new derived();
obj->check();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以上代码打印在控制台上派生.现在,我理解虚函数的概念,但我无法在此处应用它.根据我的理解,每当我们调用虚函数时,编译器都会修改调用"this->vptr->virtualfunc()",这就是调用最多派生类函数的方式.但在这种情况下,由于check()不是虚函数,编译器如何确定它需要调用func()派生?