/* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include class Foo { public: uint8_t a = 1; virtual int get() = 0; }; class Foo1 : public Foo { uint16_t b = 2; virtual int get() override { return b; } }; class Foo2 : public Foo { public: uint32_t c = 3; uint32_t cc = 4; virtual int get() override { return c; } }; class Foo3 : public Foo1, public Foo2 { uint32_t d = 4; virtual int get() override { return d; } }; class Foo4 : virtual public Foo { uint16_t b = 2; virtual int get() override { return b; } }; class Foo5 : virtual public Foo { public: uint32_t c = 3; uint32_t cc = 4; virtual int get() override { return c; } }; class Foo6 : public Foo4, public Foo5 { uint32_t d = 4; virtual int get() override { return d; } }; class Bar { public: uint8_t e = 5; }; class Bar1 : virtual public Bar { public: uint8_t f = 6; }; int main() { { Foo *x = new Foo1(); Foo *y = new Foo2(); Foo1 *z = new Foo3(); Foo *w = z; Bar *a = new Bar1(); Foo2 b; Foo &c = *w; Foo1 d = *z; b.c += 1; Foo *e = new Foo6(); Foo4 *f = dynamic_cast(e); delete a; delete x; delete y; delete z; } return 0; }