Что произойдёт в результате попытки преобразования dynamic_cast?
#include <iostream>
using namespace std;
class A{
public:
virtual ~A() {}
};
class B: public A{ };
int main(){
A * a = new A();
try{
B * b = dynamic_cast<B *>(a);
}catch(...){
}
return 0;
}
Что произойдёт в результате попытки преобразования dynamic_cast?
#include <iostream>
using namespace std;
class A{
public:
virtual ~A() {}
};
class B: public A{ };
int main(){
A * a = new A();
try{
B * b = dynamic_cast<B *>(a);
}catch(...){
}
return 0;
}
Что будет выведено на консоль в результате выполнения следующего кода?
#include <iostream>
class A
{
public:
A() { std::cout << "A "; }
~A() { std::cout << "~A "; }
};
class B
{
public:
B() { std::cout << "B "; }
~B() { std::cout << "~B "; }
};
class C: public A
{
B m_b;
public:
C() { std::cout << "C "; }
~C() { std::cout << "~C "; }
};
int main()
{
C c;
return 0;
}
Что будет выведено на консоль в результате выполнения следующего кода?
#include <iostream>
class A
{
public:
A() { std::cout << "A "; }
~A() { std::cout << "~A "; }
};
class B
{
public:
B() { std::cout << "B "; }
~B() { std::cout << "~B "; }
};
class C: public A
{
B m_b;
public:
C() { std::cout << "C "; }
~C() { std::cout << "~C "; }
};
int main()
{
C c;
return 0;
}
Какой режим наследования использован?
struct B { /*...*/ };
struct A: B { /*...*/ };
Какой режим наследования использован?
struct B { /*...*/ };
struct A: B { /*...*/ };
Каким будет результат выполнения следующего кода?
#include "iostream"
class A
{
public:
virtual int mathFunc(int n = 1) {return n+n;}
};
class B: public A
{
public:
int mathFunc(int n = 2) {return n*n;}
};
int main()
{
A a, *pa;
B b;
pa = &b;
std::cout << a.mathFunc(3)
<< pa->mathFunc(-1)
<< pa->mathFunc()
<< b.mathFunc();
}
Каким будет результат выполнения следующего кода?
#include "iostream"
class A
{
public:
virtual int mathFunc(int n = 1) {return n+n;}
};
class B: public A
{
public:
int mathFunc(int n = 2) {return n*n;}
};
int main()
{
A a, *pa;
B b;
pa = &b;
std::cout << a.mathFunc(3)
<< pa->mathFunc(-1)
<< pa->mathFunc()
<< b.mathFunc();
}
Что напечатает следующий код?
#include <iostream>
using namespace std;
class A {
private:
A() { cout << "A"; }
};
int main(int argc, char* argv[])
{
A a, b;
return 0;
}
Что напечатает следующий код?
#include <iostream>
using namespace std;
class A {
private:
A() { cout << "A"; }
};
int main(int argc, char* argv[])
{
A a, b;
return 0;
}
Что будет выведено на экран в результате выполнения следующего кода?
#include <iostream>
using namespace std;
class ABase {
public:
void f(int i) const { cout << 1;}
void f(char ch) const { cout << 2; }
};
class BBase {
public:
void f(double d) const { cout << 3;}
};
class ABBase : public ABase, public BBase {
public:
using ABase::f;
using BBase::f;
void f(char ch) const { cout << 4; }
};
void g(ABBase& ab) {
ab.f('c');
ab.f(2.5);
ab.f(4);
}
int main() {
ABBase ab;
g(ab);
}
Что будет выведено на экран в результате выполнения следующего кода?
#include <iostream>
using namespace std;
class ABase {
public:
void f(int i) const { cout << 1;}
void f(char ch) const { cout << 2; }
};
class BBase {
public:
void f(double d) const { cout << 3;}
};
class ABBase : public ABase, public BBase {
public:
using ABase::f;
using BBase::f;
void f(char ch) const { cout << 4; }
};
void g(ABBase& ab) {
ab.f('c');
ab.f(2.5);
ab.f(4);
}
int main() {
ABBase ab;
g(ab);
}
Чем отличается объединение от класса?
1) Все члены объединения хранятся по одному и тому же адресу
2) Объединения не могут иметь дружественные функции
3) Объединения не могут иметь конструктора
4) Объединения не могут иметь деструктора
5) Все члены объединения по умолчанию public
6) Объединения не могут учавствовать в наследовании
Чем отличается объединение от класса?
1) Все члены объединения хранятся по одному и тому же адресу
2) Объединения не могут иметь дружественные функции
3) Объединения не могут иметь конструктора
4) Объединения не могут иметь деструктора
5) Все члены объединения по умолчанию public
6) Объединения не могут учавствовать в наследовании
Какое исключение возбуждает dynamic_cast в случае невозможности преобразовать тип ссылки на класс? Укажите полное имя (с учётом пространств имён, используя оператор :: )
Какое исключение возбуждает dynamic_cast в случае невозможности преобразовать тип ссылки на класс? Укажите полное имя (с учётом пространств имён, используя оператор :: )
Корректно ли описание метода modify в составе класса Test?
class Test {
private:
mutable int mX;
public:
void modify( const int iNewX ) const {
mX = iNewX;
}
};
Варианты ответов:
1) Нет, так как параметр iNewX имеет тип const int, однако участвует в операторе присваивания
2) Да, корректно
3) Нет, так как метод описан в секции public, однако обращается к полю класса из секции private
4) Нет, так как метод объявлен const, однако он изменяет состояние класса
5) Нет, так как константные методы не могут возвращать void
Корректно ли описание метода modify в составе класса Test?
class Test {
private:
mutable int mX;
public:
void modify( const int iNewX ) const {
mX = iNewX;
}
};
Варианты ответов:
1) Нет, так как параметр iNewX имеет тип const int, однако участвует в операторе присваивания
2) Да, корректно
3) Нет, так как метод описан в секции public, однако обращается к полю класса из секции private
4) Нет, так как метод объявлен const, однако он изменяет состояние класса
5) Нет, так как константные методы не могут возвращать void
Что выведет код?
#include <iostream>
using namespace std;
class D {
public:
D () { cout << "D"; }
virtual ~D () { cout << "~D"; }
};
class A : public D{
public:
A () { cout << "A";}
~A() { cout << "~A";}
};
class C : public D{
public:
C () { cout << "C";}
virtual ~C () { cout << "~C";}
};
class B : public A, C {
public:
B () {cout << "B";}
~B () { cout << "~B"; }
};
int main () {
A *b = new B ();
delete b;
return 0;
}
Что выведет код?
#include <iostream>
using namespace std;
class D {
public:
D () { cout << "D"; }
virtual ~D () { cout << "~D"; }
};
class A : public D{
public:
A () { cout << "A";}
~A() { cout << "~A";}
};
class C : public D{
public:
C () { cout << "C";}
virtual ~C () { cout << "~C";}
};
class B : public A, C {
public:
B () {cout << "B";}
~B () { cout << "~B"; }
};
int main () {
A *b = new B ();
delete b;
return 0;
}
Что будет выведено в stdout при выполнении следующего кода?
#include<iostream>
struct A {
~A() {
std::cout << "A";
}
};
struct B : public A {
B() {
throw 1;
}
~B() {
std::cout << "B";
}
};
int main() {
try {
B b;
}
catch(...) { }
}
Что будет выведено в stdout при выполнении следующего кода?
#include<iostream>
struct A {
~A() {
std::cout << "A";
}
};
struct B : public A {
B() {
throw 1;
}
~B() {
std::cout << "B";
}
};
int main() {
try {
B b;
}
catch(...) { }
}
Что напечатает следующий код?
#include <iostream>
using namespace std;
class B {
public: B(char c) { cout << c;}
};
class D {
public : B bB, bA, bC;
D(void) : bA('a'), bB('b'), bC('c') { }
};
int main() {
D dInstance;
...
return 1;
}
Что напечатает следующий код?
#include <iostream>
using namespace std;
class B {
public: B(char c) { cout << c;}
};
class D {
public : B bB, bA, bC;
D(void) : bA('a'), bB('b'), bC('c') { }
};
int main() {
D dInstance;
...
return 1;
}
Каков результат компиляции и выполнения следующего кода?
#include <iostream>
using namespace std;
class Shape
{
virtual void show() = 0;
};
class Circle: public Shape
{
void show()
{
std::cout<<"Circle\n";
}
};
class Triangle: Shape
{
void show()
{
std::cout<<"Triangle\n";
}
};
int main(int argc, char* argv[])
{
Shape* shape1;
shape1 = new Circle();
shape1->show();
Shape* shape2 = new Triangle();
shape2->show();
delete shape1;
delete shape2;
return 0;
}
Варианты ответов:
1) Ошибка времени выполнения
2) Circle Triangle
3) Ошибка компиляции
4) Объект shape1 будет создан, но при попытке создания объекта shape2 будет возбуждено исключение
5) Оба объекта будут созданы, но при вызове метода shape2->show() будет возбуждено исключение
Каков результат компиляции и выполнения следующего кода?
#include <iostream>
using namespace std;
class Shape
{
virtual void show() = 0;
};
class Circle: public Shape
{
void show()
{
std::cout<<"Circle\n";
}
};
class Triangle: Shape
{
void show()
{
std::cout<<"Triangle\n";
}
};
int main(int argc, char* argv[])
{
Shape* shape1;
shape1 = new Circle();
shape1->show();
Shape* shape2 = new Triangle();
shape2->show();
delete shape1;
delete shape2;
return 0;
}
Варианты ответов:
1) Ошибка времени выполнения
2) Circle Triangle
3) Ошибка компиляции
4) Объект shape1 будет создан, но при попытке создания объекта shape2 будет возбуждено исключение
5) Оба объекта будут созданы, но при вызове метода shape2->show() будет возбуждено исключение
Что выведет на экран данная программа?
#include <iostream>
using namespace std;
class A {
public:
virtual void foo(){ cout<<"A"; }
};
class B: public virtual A {
public:
virtual void foo(){ cout<<"B"; }
};
class C: public virtual A {};
class D: public B, public C {};
int main(void) {
D d;
C &c = d;
c.foo();
return 0;
}
Что выведет на экран данная программа?
#include <iostream>
using namespace std;
class A {
public:
virtual void foo(){ cout<<"A"; }
};
class B: public virtual A {
public:
virtual void foo(){ cout<<"B"; }
};
class C: public virtual A {};
class D: public B, public C {};
int main(void) {
D d;
C &c = d;
c.foo();
return 0;
}
Если класс имеет хотя бы один абстрактный метод (чисто виртуальная функция), то такой класс называется:
Если класс имеет хотя бы один абстрактный метод (чисто виртуальная функция), то такой класс называется:
В каких из перечисленных строк произойдут ошибки компиляции?
class Base {
public:
void method1();
protected:
void method2();
private:
void method3();
};
class Child : public Base {
protected:
void method1() { }
void method2() { }
void method3() { }
};
int main() {
Base* base = new Child();
base->method1(); // 1
base->method2(); // 2
base->method3(); // 3
return 0;
}
В каких из перечисленных строк произойдут ошибки компиляции?
class Base {
public:
void method1();
protected:
void method2();
private:
void method3();
};
class Child : public Base {
protected:
void method1() { }
void method2() { }
void method3() { }
};
int main() {
Base* base = new Child();
base->method1(); // 1
base->method2(); // 2
base->method3(); // 3
return 0;
}
Каким будет результат выполнения следующего кода?
#include "stdio.h"
class Parent {
public:
void GetValue() { Count(); }
private:
virtual void Count() { printf("%d", 1); }
};
class Child : public Parent {
private:
void Count() { printf("%d", 2); }
};
int main() {
Parent * obj = new Child;
obj->GetValue();
return 0;
}
Каким будет результат выполнения следующего кода?
#include "stdio.h"
class Parent {
public:
void GetValue() { Count(); }
private:
virtual void Count() { printf("%d", 1); }
};
class Child : public Parent {
private:
void Count() { printf("%d", 2); }
};
int main() {
Parent * obj = new Child;
obj->GetValue();
return 0;
}
Как можно вызвать метод следующего класса?
class Child {
public:
void Count() { }
};
Выберите все подходящие варианты:
1)
Child * obj = new Child;
obj->Count();
2)
Child obj = new Child;
obj.Count();
3)
Child * obj = new Child;
obj.Count();
4)
Child * obj = new Child;
(*obj).Count();
5)
Child obj = new Child;
(*obj).Count();
Как можно вызвать метод следующего класса?
class Child {
public:
void Count() { }
};
Выберите все подходящие варианты:
1)
Child * obj = new Child;
obj->Count();
2)
Child obj = new Child;
obj.Count();
3)
Child * obj = new Child;
obj.Count();
4)
Child * obj = new Child;
(*obj).Count();
5)
Child obj = new Child;
(*obj).Count();
Что нужно изменить, чтобы данный код скомпилировался?
class A{};
class B: A{};
void foo(A&a) {}
int main(int argc, char* argv[])
{
B b;
foo(b);
return 0;
}
Что нужно изменить, чтобы данный код скомпилировался?
class A{};
class B: A{};
void foo(A&a) {}
int main(int argc, char* argv[])
{
B b;
foo(b);
return 0;
}
Дан следующий код:
class A { };
class B : public A { };
class C : public B { };
class D : public C { };
void method(B* b) { }
void method(C* c) { }
int main() {
...
return 0;
}
Какие фрагменты кода, вставленные вместо многоточия в методе main, не приведут к ошибке компиляции?
Дан следующий код:
class A { };
class B : public A { };
class C : public B { };
class D : public C { };
void method(B* b) { }
void method(C* c) { }
int main() {
...
return 0;
}
Какие фрагменты кода, вставленные вместо многоточия в методе main, не приведут к ошибке компиляции?