小编Viv*_*nga的帖子

指向算术的指针

有人可以解释以下代码的输出

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)

c++ pointer-arithmetic

5
推荐指数
2
解决办法
1082
查看次数

从正常函数调用虚函数

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()派生?

c++ polymorphism virtual

2
推荐指数
1
解决办法
173
查看次数

标签 统计

c++ ×2

pointer-arithmetic ×1

polymorphism ×1

virtual ×1