WEBVTT

00:00.840 --> 00:04.440
Hello and welcome to my course, Learn Advanced modern C++.

00:05.340 --> 00:09.630
In this video, I'm going to give you an overview of the course and tell you what you can expect.

00:10.650 --> 00:17.700
This is called advanced modern C++, but it seems to have rather a flexible meaning on Udemy. And covering

00:17.700 --> 00:19.110
intermediate as well as advanced.

00:19.440 --> 00:24.360
I have tried to design this course so that people with only a fairly basic understanding of C++ can follow

00:24.360 --> 00:24.540
it.

00:27.350 --> 00:32.330
I occasionally need to move myself around the screen to avoid covering up the text.

00:33.050 --> 00:34.760
I hope that is not too distracting!

00:36.020 --> 00:38.270
So what do we mean by Modern C++?

00:38.780 --> 00:45.950
Well, Modern C++ as opposed to Traditional C++, or I think "Older" is the more politically correct term!

00:46.880 --> 00:53.000
The way that a lot of people seem to think of C++ is that it is C with a few extra features. So you

00:53.000 --> 00:58.370
have lots of arrays and pointers from C, and then you stick inheritance on top of that, and maybe a few other

00:58.370 --> 00:58.880
features.

00:59.990 --> 01:04.130
The language was originally called C with classes, and a lot of people still use it that way.

01:05.760 --> 01:08.010
Modern C++ began in 2011.

01:08.430 --> 01:13.590
There was a very substantial revision to the language, which added lots of new features and also many

01:13.590 --> 01:19.050
improvements. And Bjarne Stroustrup, the designer of C++, said at the time,

01:19.440 --> 01:25.230
"It feels like a new language." So it is not just about learning new features, but also about changing

01:25.230 --> 01:28.140
the way that you think about C++ and the way that you write code.

01:29.040 --> 01:33.750
So that is quite a lot. And what you get for all that effort?

01:35.220 --> 01:37.980
Well, Modern C++ allows you to write safer code.

01:37.980 --> 01:44.010
You can avoid all the dangerous C features like explicit pointers, and memory which is allocated

01:44.010 --> 01:44.550
on the heap.

01:45.180 --> 01:50.660
You can get the compiler to generate loops for you, so they are going to be accurate, and not run off

01:50.700 --> 01:55.980
the end of the structure. And you do not need to manage memory yourself.

01:58.260 --> 02:00.510
Modern C++ is more expressive.

02:00.930 --> 02:06.330
It has better abstractions, so you do not need to write as much so-called "boilerplate" code.

02:06.630 --> 02:11.550
That means code which serves no useful purpose, but the language forces you to write it out every time.

02:13.220 --> 02:18.380
There are also local function, lambda expressions. And these make the containers and the algorithms

02:18.380 --> 02:20.960
in the Standard Template Library work together much better.

02:22.010 --> 02:27.530
So with containers, algorithms and lambda expressions, you can avoid writing a lot of explicit loops.

02:28.970 --> 02:30.710
Modern C++ is more efficient.

02:31.850 --> 02:36.950
The program will do more of its work at compile time, so that's just once. As opposed to every time you

02:36.950 --> 02:37.670
run the program.

02:38.090 --> 02:43.430
So that means the program takes less time to run. And you can avoid making copies of temporary data,

02:43.670 --> 02:47.090
which was something that C++ got a lot of criticism for.

02:49.280 --> 02:54.980
If you're trying to convince your manager to switch to modern C++. The benefits are there is less low

02:54.980 --> 02:57.770
level code for programmers to write and to test.

02:58.460 --> 03:00.770
So that means the development time is reduced.

03:00.770 --> 03:02.510
You can get your product to market quicker.

03:03.500 --> 03:06.860
The code is clearer and more expressive, so it is easier to maintain.

03:08.160 --> 03:13.380
The code is more likely to be correct and efficient, so that means fewer defect reports and performance

03:13.380 --> 03:13.890
issues.

03:14.430 --> 03:17.530
And you can avoid many of the situations which cause undefined behaviour.

03:17.940 --> 03:21.870
So that means less crashes and not so much time debugging them.

03:24.590 --> 03:32.270
This course is going to cover C++ 11 and 14. C++ 17 was four years ago, but it is still not fully

03:32.270 --> 03:38.000
supported by all compilers, so we have to stick to the versions, but there is plenty to keep us busy!

03:39.140 --> 03:43.640
We start off by providing the foundation material for this course, so we have things like arrays, but

03:43.640 --> 03:47.030
also strings and vectors, iterators and templates.

03:47.720 --> 03:51.050
And also, we look at the way that you need to think about C++.

03:52.540 --> 03:57.600
So you may think this is all very easy, very basic stuff, and you can just skip through it. But please don't!

03:58.000 --> 04:01.030
There is a lot of material here that you probably have not seen before.

04:01.450 --> 04:06.430
And also there is a lot of important ideas about the way to think about C++.

04:09.180 --> 04:13.830
So once we have covered the necessary material for the course, we can get into the heart of the matter.

04:15.000 --> 04:20.040
The main features of the course will include operator overloading, lambda expressions, inheritance,

04:20.670 --> 04:28.200
exceptions and RAII, which is a very important concept in C++ programming. Move semantics to avoid unnecessary

04:28.200 --> 04:35.580
copying. And compile-time programming, which is one of the main directions in C++ these days. And also

04:35.580 --> 04:36.500
the standard library.

04:36.540 --> 04:41.400
So things like files and streams, the algorithms and containers from the Standard Template Library,

04:41.970 --> 04:44.760
smart pointers, and a lot more than this.

04:48.260 --> 04:55.720
The course consists of videos, each video will cover a small part of one of those topics. In the video,

04:55.730 --> 05:00.260
there will usually be a demonstration, with source code, of how to use the topic, how it works.

05:01.310 --> 05:03.560
You can download the source code for the video.

05:05.870 --> 05:11.000
There are also exercises for the videos, which are very simple. They basically just ask you to repeat

05:11.000 --> 05:14.720
whati s in the video. Which is important reinforcement. So do not skip that!

05:15.740 --> 05:20.990
And of course, solutions for those. At the end of each of the sections, there is going to be a workshop.

05:21.350 --> 05:24.770
So this can cover material from all the section and other parts of the course.

05:25.580 --> 05:30.710
The exercises are going to be more challenging. And you will get solutions for those as well.

05:36.210 --> 05:39.660
I regard providing support as a very important part of the course.

05:40.410 --> 05:42.450
I take great pride in providing good support.

05:42.840 --> 05:47.760
So if you have any questions or if you encounter any difficulties, please get in touch.

05:48.030 --> 05:52.110
Use the Q&amp;A for the video or send me a message.

05:53.250 --> 05:59.550
And if I'm awake and within reach of a computer, I will normally reply within an hour! So I will be

05:59.550 --> 06:01.350
supporting the course very actively.

06:02.280 --> 06:04.260
So that's it for this video, really.

06:04.650 --> 06:07.230
I hope you enjoy the course and find it useful.

06:07.590 --> 06:13.830
And as I say at the end of each video, keep coding! Because it is not enough just to sit there and watch

06:13.830 --> 06:14.370
the videos.

06:14.370 --> 06:17.750
You have to type in the code yourself, then experiment with it.

06:17.760 --> 06:19.890
Change things, add new features.

06:20.280 --> 06:21.210
See what happens.

06:21.510 --> 06:24.000
See how you can break it. And so on.

06:24.690 --> 06:26.030
So I'll see you next time.

06:26.040 --> 06:28.320
But until then, keep coding!
