#include <vector>
#include <string>
#include <iostream>
using namespace std;
void f1()
{
int a = 1;
int b = 2;
cout<<++a+b--<<endl;
}
namespace test2
{
//Найти ошибку компиляции
/*void f(string & s)
{
cout<<s<<endl;
}*/
//Решение
void f(const string & s)
{
cout<<s<<endl;
}
}
void test3()
{
vector<int> v;
v.reserve(10);
for(int i=0;i<10;++i)
v[i]=1;
v.push_back(2);
for(auto a:v)
cout<<a<<endl;
}
//Что в фрагменте кода неправильно
//Удаление массива - delete[] a
//Считают, что есть ещё ошибки, какие не знаю
void test4()
{
char* a=new char[10];
if(a)
{
delete a;
}
}
namespace test5
{
struct A {
virtual void f(){cout<<"A"<<endl;}
};
struct B {
void f(){cout<<"B"<<endl;}
};
struct C:A,B {
void f(){cout<<"C"<<endl;}
};
}
namespace test6
{
template<class T>
struct A {
virtual void f(){T()();}
};
struct B {
void operator()(){cout<<"B"<<endl;}
};
struct C:B {
void operator()(){cout<<"C"<<endl;}
};
template<>
struct A<B>
{
void f()
{
cout<<"A"<<endl;
}
};
}
namespace test7
{
struct A
{
A()
{
cout<<"construct"<<endl;
}
A(const A&)
{
cout<<"copy"<<endl;
}
A& operator=(const A&)
{
cout<<"assign"<<endl;
return *this;
}
};
A f()
{
return A();
}
}
int main()
{
cout<<"-----------------test1---------------------\n";
f1();
cout<<"-----------------test2---------------------\n";
test2::f("hello");
cout<<"-----------------test3---------------------\n";
test3();
cout<<"-----------------test4---------------------\n";
test4();
cout<<"-----------------test5---------------------\n";
test5::A* a = new test5::C();
test5::B* b = new test5::C();
a->f();
b->f();
cout<<"-----------------test6---------------------\n";
test6::A<test6::B>().f();
test6::A<test6::C>().f();
cout<<"-----------------test7---------------------\n";
test7::A a1 = test7::f();
test7::A a2 = a1;
return 0;
}