Когда объекту класса 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'
Предложение FROM
использует синтаксис соединения старого стиля с CTE a
, указанным 9 раз. Фактически это CROSS JOIN
декартово произведение 10-рядного CTE, так что генерируется 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 строк, но возвращается только 5000000 из-за предложения TOP
.
См. этот ответ для примера этой техники, использующей более новый синтаксис CROSS JOIN
, который генерировал 2 миллиарда строк примерно за 6 минут на моем боксе.