This is C I want to know TODO lists comments include include
This is C++. I want to know TODO lists comments.
#include <cstdlib>
#include <iostream>
#include <map>
#include <memory>
#include <string>
#include <vector>
#include \"Song.h\"
using namespace std;
void demoMoveUniquePtr();
unique_ptr<Song> SongFactory(const std::string& artist,
const std::string& title);
void makeSongs();
void songVector();
class MyClass;
class ClassFactory;
void demoUniqueOwnership();
void demoUniqueArray(int);
int main(int argc, char** argv) {
// TODO: Part 1, Step 2 - Uncomment the call to demoMoveUniquePtr()
//demoMoveUniquePtr();
// TODO: Part 1, Step 5 - Comment out the above call and uncomment the following call
//makeSongs();
// TODO: Part 1, Step 6a - Comment out the above call and uncomment the following call
//songVector();
//demoUniqueOwnership();
//demoUniqueArray(5);
return EXIT_SUCCESS;
}
void demoMoveUniquePtr() {
auto ptrA = make_unique<Song>(\"Diana Krall\", \"The Look of Love\");
cout << ptrA->getArtist() << endl;
// TODO: Part 1, Step 3a - Uncomment out the next line
// auto ptrB = ptrA;
// TODO: Part 1, Step 3b - Comment out the next line
auto ptrB = move(ptrA);
cout << ptrB->getArtist() << endl;
// TODO: Part 1, Step 4 - Uncomment the next line.
// cout << ptrA->getArtist() << endl;
}
/**
* The following example shows how to create unique_ptr instances and pass them
* between functions.
*/
void makeSongs() {
// Create a new unique_ptr with a new object.
auto song = make_unique<Song>(\"Mr. Children\", \"Namonaki Uta\");
// Use the unique_ptr.
map<string, string> songs;
songs[song->getArtist()] = song->getTitle();
// Move pointer from one unique_ptr to another.
unique_ptr<Song> song2 = std::move(song);
// this should have no affect
songs[song2->getArtist()] = song2->getTitle();
// Obtain unique_ptr from function that returns by value.
auto song3 = SongFactory(\"Michael Jackson\", \"Beat It\");
songs[song3->getArtist()] = song3->getTitle();
for (auto it = songs.begin(); it != songs.end(); ++it) {
cout << \"[\" << it->first << \", \" << it->second << \"]\" << endl;
}
}
unique_ptr<Song> SongFactory(const std::string& artist,
const std::string& title) {
// Implicit move operation into the variable that stores the result.
return make_unique<Song>(artist, title);
}
/**
* The following example shows how to create unique_ptr instances and use them in a vector.
* In the range for loop, notice that the unique_ptr is passed by reference. If you try to
* pass by value here, the compiler will throw an error because the unique_ptr copy
* constructor is deleted.
*/
void songVector() {
vector<unique_ptr<Song>> songs;
// Create a few new unique_ptr<Song> instances
// and add them to vector using implicit move semantics.
songs.push_back(make_unique<Song>(\"B\'z\", \"Juice\"));
songs.push_back(make_unique<Song>(\"Namie Amuro\", \"Funky Town\"));
songs.push_back(make_unique<Song>(\"Kome Kome Club\", \"Kimi ga Iru Dake de\"));
songs.push_back(make_unique<Song>(\"Ayumi Hamasaki\", \"Poker Face\"));
// Pass by const reference when possible to avoid copying.
// TODO: Part 1, Step 6b: Remove the & after auto to pass the unique_ptr by value
for (const auto& song : songs) {
cout << \"Artist: \" << song->getArtist() << \" Title: \"
<< song->getTitle() << endl;
}
}
/**
* The following example shows how to initialize a unique_ptr that is a class
* member.
*/
class ClassFactory {
public:
void doSomething() {
cout << \"I\'m doing something...\" << endl;
}
};
class MyClass {
private:
// MyClass owns the unique_ptr.
unique_ptr<ClassFactory> factory;
public:
// Initialize by using make_unique with ClassFactory default constructor.
MyClass() :
factory(make_unique<ClassFactory>()) {
}
void makeClass() {
factory->doSomething();
}
};
void demoUniqueOwnership() {
MyClass myClass;
myClass.makeClass();
}
/**
* You can use make_unique to create a unique_ptr to an array, but you cannot
* use make_unique to initialize the array elements
*/
void demoUniqueArray(int size) {
// Create a unique_ptr to an array of 5 integers.
auto p = make_unique<int[]>(size);
// Initialize the array.
for (int i = 0; i < size; ++i) {
p[i] = i;
cout << p[i] << endl;
}
}
#ifndef LAB04_SONG_H
#define LAB04_SONG_H
#include <string>
class Song {
private:
std::string m_artist;
std::string m_title;
public:
Song(const std::string& artist, const std::string& title);
std::string getArtist() const;
std::string getTitle() const;
virtual ~Song();
};
#endif //LAB04_SONG_H
#include \"Song.h\"
Song::Song(const std::string& artist, const std::string& title) :
m_artist(artist), m_title(title) {
}
std::string Song::getArtist() const {
return m_artist;
}
std::string Song::getTitle() const {
return m_title;
}
Song::~Song() {
}
Solution
#include <cstdlib>
#include <iostream>
#include <map>
#include <memory>
#include <string>
#include <vector>
#include \"Song.h\"
using namespace std;
void demoMoveUniquePtr();
unique_ptr<Song> SongFactory(const std::string& artist,
const std::string& title);
void makeSongs();
void songVector();
class MyClass;
class ClassFactory;
void demoUniqueOwnership();
void demoUniqueArray(int);
int main(int argc, char** argv) {
// TODO: Part 1, Step 2 - Uncomment the call to demoMoveUniquePtr()
//demoMoveUniquePtr();
// TODO: Part 1, Step 5 - Comment out the above call and uncomment the following call
//makeSongs();
// TODO: Part 1, Step 6a - Comment out the above call and uncomment the following call
//songVector();
//demoUniqueOwnership();
//demoUniqueArray(5);
return EXIT_SUCCESS;
}
void demoMoveUniquePtr() {
auto ptrA = make_unique<Song>(\"Diana Krall\", \"The Look of Love\");
cout << ptrA->getArtist() << endl;
// TODO: Part 1, Step 3a - Uncomment out the next line
// auto ptrB = ptrA;
// TODO: Part 1, Step 3b - Comment out the next line
auto ptrB = move(ptrA);
cout << ptrB->getArtist() << endl;
// TODO: Part 1, Step 4 - Uncomment the next line.
// cout << ptrA->getArtist() << endl;
}
/**
* The following example shows how to create unique_ptr instances and pass them
* between functions.
*/
void makeSongs() {
// Create a new unique_ptr with a new object.
auto song = make_unique<Song>(\"Mr. Children\", \"Namonaki Uta\");
// Use the unique_ptr.
map<string, string> songs;
songs[song->getArtist()] = song->getTitle();
// Move pointer from one unique_ptr to another.
unique_ptr<Song> song2 = std::move(song);
// this should have no affect
songs[song2->getArtist()] = song2->getTitle();
// Obtain unique_ptr from function that returns by value.
auto song3 = SongFactory(\"Michael Jackson\", \"Beat It\");
songs[song3->getArtist()] = song3->getTitle();
for (auto it = songs.begin(); it != songs.end(); ++it) {
cout << \"[\" << it->first << \", \" << it->second << \"]\" << endl;
}
}
unique_ptr<Song> SongFactory(const std::string& artist,
const std::string& title) {
// Implicit move operation into the variable that stores the result.
return make_unique<Song>(artist, title);
}
/**
* The following example shows how to create unique_ptr instances and use them in a vector.
* In the range for loop, notice that the unique_ptr is passed by reference. If you try to
* pass by value here, the compiler will throw an error because the unique_ptr copy
* constructor is deleted.
*/
void songVector() {
vector<unique_ptr<Song>> songs;
// Create a few new unique_ptr<Song> instances
// and add them to vector using implicit move semantics.
songs.push_back(make_unique<Song>(\"B\'z\", \"Juice\"));
songs.push_back(make_unique<Song>(\"Namie Amuro\", \"Funky Town\"));
songs.push_back(make_unique<Song>(\"Kome Kome Club\", \"Kimi ga Iru Dake de\"));
songs.push_back(make_unique<Song>(\"Ayumi Hamasaki\", \"Poker Face\"));
// Pass by const reference when possible to avoid copying.
// TODO: Part 1, Step 6b: Remove the & after auto to pass the unique_ptr by value
for (const auto& song : songs) {
cout << \"Artist: \" << song->getArtist() << \" Title: \"
<< song->getTitle() << endl;
}
}
/**
* The following example shows how to initialize a unique_ptr that is a class
* member.
*/
class ClassFactory {
public:
void doSomething() {
cout << \"I\'m doing something...\" << endl;
}
};
class MyClass {
private:
// MyClass owns the unique_ptr.
unique_ptr<ClassFactory> factory;
public:
// Initialize by using make_unique with ClassFactory default constructor.
MyClass() :
factory(make_unique<ClassFactory>()) {
}
void makeClass() {
factory->doSomething();
}
};
void demoUniqueOwnership() {
MyClass myClass;
myClass.makeClass();
}
/**
* You can use make_unique to create a unique_ptr to an array, but you cannot
* use make_unique to initialize the array elements
*/
void demoUniqueArray(int size) {
// Create a unique_ptr to an array of 5 integers.
auto p = make_unique<int[]>(size);
// Initialize the array.
for (int i = 0; i < size; ++i) {
p[i] = i;
cout << p[i] << endl;
}
}
#ifndef LAB04_SONG_H
#define LAB04_SONG_H
#include <string>
class Song {
private:
std::string m_artist;
std::string m_title;
public:
Song(const std::string& artist, const std::string& title);
std::string getArtist() const;
std::string getTitle() const;
virtual ~Song();
};
#endif //LAB04_SONG_H
#include \"Song.h\"
Song::Song(const std::string& artist, const std::string& title) :
m_artist(artist), m_title(title) {
}
std::string Song::getArtist() const {
return m_artist;
}
std::string Song::getTitle() const {
return m_title;
}
Song::~Song() {
}






