Benar. Hari-hari ini tiga hal yang biasanya dalam pelajaran 2 harus banyak bergerak, jauh di kemudian hari:
- string sebagai array dari char *, strlen, metode strxxx, dan sebagainya
- array secara umum dan pointer aritmatika
- hapus apa yang baru, hapus [] apa yang baru [], dan bahkan destruktor
Hal-hal yang biasanya ada dalam pelajaran 99 ini harus bergerak jauh, jauh lebih awal
- templat sebagai hal yang digunakan (tulis, jangan banyak)
- std :: string
- std :: shared_ptr <>
- std :: vector <>, iterators, koleksi lainnya
Evey raw pointer harus segera diberikan ke pembungkus pointer cerdas (saya akan mulai dengan yang dibagikan, dan mempertimbangkan yang unik nanti karena membutuhkan penjelasan std :: move dan referensi nilai). Melakukan hal ini akan membuat belajar C ++ terasa sangat mirip dengan belajar Java atau C #, di mana Anda belajar perpustakaan pada saat yang sama dengan bahasa. Ini akan menghilangkan banyak pekerjaan ingatan, dan membuat orang tidak terlalu khawatir dengan gotcha.
Saya juga akan mengerjakan lambdas ke dalam gambar pertama kali kami ingin beralih melalui koleksi dan melakukan sesuatu untuk setiap elemen.
Penafian: Saya sedang menulis kursus C ++ untuk Pluralsight sekarang dan menggunakan pendekatan ini. Modul terakhir adalah "memahami kode orang lain" dan di situlah saya akan meletakkan hal-hal yang membingungkan seperti char * string, manajemen memori manual, aritmatika pointer, dan sebagainya.
Pembaruan: beberapa orang bertanya mengapa keberadaan C ++ 0x menginspirasi hal-hal pengajaran yang bisa diajarkan dengan C ++ 03. Saya pikir itu beberapa hal:
- pointer benar-benar pintar, yang ramah koleksi, menghilangkan kebutuhan untuk hal-hal seperti "array pointer Karyawan" yang menyebabkan kita selalu kembali pada yang baru / hapus, aritmatika pointer dll
- otomatis menghilangkan rasa sakit dari deklarasi iterator
- lambdas membuat meramalkan sesuatu yang orang biasa akan lakukan
- bahkan sesuatu yang sepele seperti parsing
>>
dengan benar menghilangkan gotcha yang akan ada ketika mendeklarasikan beberapa template template
- dan seterusnya
Cara saya melihatnya, ada hal-hal yang bisa kita ubah tentang cara kita mengajar C ++ beberapa waktu yang lalu, tetapi beberapa dari kita menahan diri karena kita masih membutuhkan cara sekolah lama untuk mundur atau karena mengajar itu hanya melibatkan banyak pengetahuan misterius.