Генерация рядов без петель

Когда объекту класса Derived присвоен объект Base class Object, все члены объекта производного класса копируются в объект базового класса, за исключением членов, которых нет в базовом классе. Эти члены удаляются компилятором. Это называется Object Slicing.

Вот пример:

#include<bits/stdc++.h>
using namespace std;
class Base
{
    public:
        int a;
        int b;
        int c;
        Base()
        {
            a=10;
            b=20;
            c=30;
        }
};
class Derived : public Base
{
    public:
        int d;
        int e;
        Derived()
        {
            d=40;
            e=50;
        }
};
int main()
{
    Derived d;
    cout<<d.a<<"\n";
    cout<<d.b<<"\n";
    cout<<d.c<<"\n";
    cout<<d.d<<"\n";
    cout<<d.e<<"\n";


    Base b = d;
    cout<<b.a<<"\n";
    cout<<b.b<<"\n";
    cout<<b.c<<"\n";
    cout<<b.d<<"\n";
    cout<<b.e<<"\n";
    return 0;
}

Он будет генерировать:

[Error] 'class Base' has no member named 'd'
[Error] 'class Base' has no member named 'e'
0
задан Dale Burrell 24 March 2019 в 20:19
поделиться

1 ответ

Предложение FROM использует синтаксис соединения старого стиля с CTE a, указанным 9 раз. Фактически это CROSS JOIN декартово произведение 10-рядного CTE, так что генерируется 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 строк, но возвращается только 5000000 из-за предложения TOP.

См. этот ответ для примера этой техники, использующей более новый синтаксис CROSS JOIN, который генерировал 2 миллиарда строк примерно за 6 минут на моем боксе.

0
ответ дан Dan Guzman 24 March 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: