C++ Primer, Fifth Edition
std::shared_ptr<std::set<line_no>> lines; // lines it's on
std::shared_ptr<std::vector<std::string>> file; // input file
};
The constructor’s only job is to store its arguments in the corresponding data
members, which it does in the constructor initializer list (§ 7.1.4, p. 265).
The 
query
Function
The query function takes a string, which it uses to locate the corresponding set of
line numbers in the map. If the string is found, the query function constructs a
QueryResult from the given string, the TextQuery file member, and the set
that was fetched from wm.
The only question is: What should we return if the given string is not found? In
this case, there is no set to return. We’ll solve this problem by defining a local
static object that is a shared_ptr to an empty set of line numbers. When the
word is not found, we’ll return a copy of this shared_ptr:
Click here to view code image
QueryResult
TextQuery::query(const string &sought) const
{
// we'll return a pointer to this set if we don't find sought
static shared_ptr<set<line_no>> nodata(new set<line_no>);
// use find and not a subscript to avoid adding words to wm!
auto loc = wm.find(sought);
if (loc == wm.end())
return QueryResult(sought, nodata, file); // not found
else
return QueryResult(sought, loc->second, file);
}
Printing the Results
The print function prints its given QueryResult object on its given stream:
Click here to view code image
ostream &print(ostream & os, const QueryResult &qr)
{
// if the word was found, print the count and all occurrences
os << qr.sought << " occurs " << qr.lines->size() << " "
<< make_plural(qr.lines->size(), "time", "s") <<
endl;
// print each line in which the word appeared
for (auto num : *qr.lines) // for every element in the set
// don't confound the user with text lines starting at 0
www.it-ebooks.info
How to convert pdf to ppt for - C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF in C#.net, ASP.NET MVC, WinForms, WPF
Online C# Tutorial for Creating PDF from Microsoft PowerPoint Presentation
convert pdf to ppt; convert pdf to powerpoint online no email
How to convert pdf to ppt for - VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to PDF in vb.net, ASP.NET MVC, WinForms, WPF
VB.NET Tutorial for Export PDF file from Microsoft Office PowerPoint
how to change pdf to powerpoint format; how to convert pdf to ppt using
C++ Primer, Fifth Edition
os << "\t(line " << num + 1 << ") "
<< *(qr.file->begin() + num) << endl;
return os;
}
We use the size of the set to which the qr.lines points to report how many
matches were found. Because that set is in a shared_ptr, we have to remember to
dereference lines. We call make_plural (§ 6.3.2, p. 224) to print time or times,
depending on whether that size is equal to 1.
In the for we iterate through the set to which lines points. The body of the for
prints the line number, adjusted to use human-friendly counting. The numbers in the
set are indices of elements in the vector, which are numbered from zero. However,
most users think of the first line as line number 1, so we systematically add 1 to the
line numbers to convert to this more common notation.
We use the line number to fetch a line from the vector to which file points.
Recall that when we add a number to an iterator, we get the element that many
elements further into the vector (§ 3.4.2, p. 111). Thus, file->begin() + num is
the numth element after the start of the vector to which file points.
Note that this function correctly handles the case that the word is not found. In this
case, the set will be empty. The first output statement will note that the word
occurred 0 times. Because *res.lines is empty. the for loop won’t be executed.
Exercises Section 12.3.2
Exercise 12.30: Define your own versions of the TextQuery and
QueryResult classes and execute the runQueries function from § 12.3.1
(p. 486).
Exercise 12.31: What difference(s) would it make if we used a vector
instead of a set to hold the line numbers? Which approach is better? Why?
Exercise 12.32: Rewrite the TextQuery and QueryResult classes to use
a StrBlob instead of a vector<string> to hold the input file.
Exercise 12.33: In Chapter 15 we’ll extend our query system and will need
some additional members in the QueryResult class. Add members named
begin and end that return iterators into the set of line numbers returned
by a given query, and a member named get_file that returns a
shared_ptr to the file in the QueryResult object.
Chapter Summary
In C++, memory is allocated through new expressions and freed through delete
expressions. The library also defines an allocator class for allocating blocks of
dynamic memory.
www.it-ebooks.info
Online Convert PowerPoint to PDF file. Best free online export
Download Free Trial. Convert a PPTX/PPT File to PDF. Easy converting! We try to make it as easy as possible to convert your PPTX/PPT files to PDF.
pdf to ppt converter; online pdf converter to powerpoint
How to C#: Convert PDF, Excel, PPT to Word
How to C#: Convert PDF, Excel, PPT to Word. Online C# Tutorial for Converting PDF, MS-Excel, MS-PPT to Word. PDF, MS-Excel, MS-PPT to Word Conversion Overview.
how to convert pdf to powerpoint; pdf to powerpoint converter online
C++ Primer, Fifth Edition
Programs that allocate dynamic memory are responsible for freeing the memory they
allocate. Properly freeing dynamic memory is a rich source of bugs: Either the memory
is never freed, or it is freed while there are still pointers referring to the memory. The
new library defines smart pointers—shared_ptr, unique_ptr, and weak_ptr—
that make managing dynamic memory much safer. A smart pointer automatically frees
the memory once there are no other users of that memory. When possible, modern
C++ programs ought to use smart pointers.
Defined Terms
allocator Library class that allocates unconstructed memory.
dangling pointer A pointer that refers to memory that once had an object but
no longer does. Program errors due to dangling pointers are notoriously difficult
to debug.
delete Frees memory allocated by new. delete p frees the object and delete
[] p frees the array to which p points. p may be null or point to memory
allocated by new.
deleter Function passed to a smart pointer to use in place of delete when
destroying the object to which the pointer is bound.
destructor Special member function that cleans up an object when the object
goes out of scope or is deleted.
dynamically allocated Object that is allocated on the free store. Objects
allocated on the free store exist until they are explicitly deleted or the program
terminates.
free store Memory pool available to a program to hold dynamically allocated
objects.
heap Synonym for free store.
new Allocates memory from the free store. new T allocates and constructs an
object of type T and returns a pointer to that object; if T is an array type, new
returns a pointer to the first element in the array. Similarly, new [n] T allocates
n
objects of type T and returns a pointer to the first element in the array. By
default, the allocated object is default initialized. We may also provide optional
initializers.
placement new Form of new that takes additional arguments passed in
parentheses following the keyword new; for example, new (nothrow) int tells
new that it should not throw an exception.
reference count Counter that tracks how many users share a common object.
www.it-ebooks.info
How to C#: Convert Word, Excel and PPT to PDF
How to C#: Convert Word, Excel and PPT to PDF. Online C# Tutorial for Converting MS Office Word, Excel and PowerPoint to PDF. How to C#: Convert PPT to PDF.
pdf to ppt; how to convert pdf to ppt for
C# PDF Convert: How to Convert MS PPT to Adobe PDF Document
C# PDF Convert: How to Convert MS PPT to Adobe PDF Document. Provide Free Demo Code for PDF Conversion from Microsoft PowerPoint in C# Program.
how to change pdf to powerpoint on; embed pdf into powerpoint
C++ Primer, Fifth Edition
Used by smart pointers to know when it is safe to delete memory to which the
pointers point.
shared_ptr Smart pointer that provides shared ownership: The object is deleted
when the last shared_ptr pointing to that object is destroyed.
smart pointer Library type that acts like a pointer but can be checked to see
whether it is safe to use. The type takes care of deleting memory when
appropriate.
unique_ptr Smart pointer that provides single ownership: The object is deleted
when the unique_ptr pointing to that object is destroyed. unique_ptrs
cannot be directly copied or assigned.
weak_ptr Smart pointer that points to an object managed by a shared_ptr.
The shared_ptr does not count weak_ptrs when deciding whether to delete
its object.
Part III: Tools for Class Authors
Contents
Chapter 13 Copy Control
Chapter 14 Overloaded Operations and Conversions
Chapter 15 Object-Oriented Programming
Chapter 16 Templates and Generic Programming
Classes are the central concept in C++. Chapter 7 began our detailed coverage of how
classes are defined. That chapter covered topics fundamental to any use of classes:
class scope, data hiding, and constructors. It also introduced various important class
features: member functions, the implicit this pointer, friends, and const, static,
and mutable members. In this part, we’ll extend our coverage of classes by looking
at copy control, overloaded operators, inheritance, and templates.
As we’ve seen, in C++ classes define constructors to control what happens when
objects of the class type are initialized. Classes also control what happens when
objects are copied, assigned, moved, and destroyed. In this respect, C++ differs from
other languages, many of which do not give class designers the ability to control these
operations. Chapter 13 covers these topics. This chapter also covers two important
concepts introduced by the new standard: rvalue references and move operations.
Chapter 14 looks at operator overloading, which allows operands of class types to
be used with the built-in operators. Operator overloading is one of the ways whereby
C++ lets us create new types that are as intuitive to use as are the built-in types.
Among the operators that a class can overload is the funtion call operator. We can
www.it-ebooks.info
C# TIFF: Learn to Convert MS Word, Excel, and PPT to TIFF Image
PPTXDocument doc = new PPTXDocument(@"demo.pptx"); if (null == doc) throw new Exception("Fail to load PowerPoint Document"); // Convert PPT to Tiff.
convert pdf document to powerpoint; create powerpoint from pdf
VB.NET PowerPoint: Process & Manipulate PPT (.pptx) Slide(s)
VB.NET PowerPoint processing control add-on can do PPT creating, loading We are dedicated to provide powerful & profession imaging controls, PDF document, image
convert pdf to powerpoint using; how to change pdf to ppt on
C++ Primer, Fifth Edition
“call” objects of such classes just as if they were functions. We’ll also look at new
library facilities that make it easy to use different types of callable objects in a uniform
way.
This chapter concludes by looking at another special kind of class member function
—conversion operators. These operators define implicit conversions from objects of
class type. The compiler applies these conversions in the same contexts—and for the
same reasons—as it does with conversions among the built-in types.
The last two chapters in this part cover how C++ supports object-oriented and
generic programming.
Chapter 15 covers inheritance and dynamic binding. Along with data abstraction,
inheritance and dynamic binding are fundamental to object-oriented programming.
Inheritance makes it easier for us to define related types and dynamic binding lets us
write type-indepenent code that can ignore the differences among types that are
related by inheritance.
Chapter 16 covers function and class templates. Templates let us write generic
classes and functions that are type-independent. A number of new template-related
features were introduced by the new standard: variadic templates, template type
aliases, and new ways to control instantiation.
Writing our own object-oriented or generic types requires a fairly good
understanding of C++. Fortunately, we can use object-oriented and generic types
without understanding the details of how to build them. For example, the standard
library uses the facilities we’ll study in Chapters 15 and 16 extensively, and we’ve used
the library types and algorithms without needing to know how they are implemented.
Readers, therefore, should understand that Part III covers fairly advanced topics.
Writing templates or object-oriented classes requires a good understanding of the
basics of C++ and a good grasp of how to define more basic classes.
Chapter 13. Copy Control
Contents
Section 13.1 Copy, Assign, and Destroy
Section 13.2 Copy Control and Resource Management
Section 13.3 Swap
Section 13.4 A Copy-Control Example
Section 13.5 Classes That Manage Dynamic Memory
Section 13.6 Moving Objects
Chapter Summary
www.it-ebooks.info
VB.NET PowerPoint: Convert & Render PPT into PDF Document
VB.NET PowerPoint - Render PPT to PDF in VB.NET. How to Convert PowerPoint Slide to PDF Using VB.NET Code in .NET. Visual C#. VB.NET. Home > .NET Imaging SDK >
adding pdf to powerpoint; how to change pdf file to powerpoint
VB.NET PowerPoint: Read & Scan Barcode Image from PPT Slide
VB.NET PPT PDF-417 barcode scanning SDK to detect PDF-417 barcode image from PowerPoint slide. VB.NET APIs to detect and decode
pdf conversion to powerpoint; convert pdf file to ppt online
C++ Primer, Fifth Edition
Defined Terms
As we saw in Chapter 7, each class defines a new type and defines the operations
that objects of that type can perform. In that chapter, we also learned that classes
can define constructors, which control what happens when objects of the class type
are created.
In this chapter we’ll learn how classes can control what happens when objects of
the class type are copied, assigned, moved, or destroyed. Classes control these actions
through special member functions: the copy constructor, move constructor, copy-
assignment operator, move-assignment operator, and destructor.
When we define a class,
we specify—explicitly or implicitly—what happens when
objects of that class type are copied, moved, assigned, and destroyed. A class controls
these operations by defining five special member functions: copy constructorcopy-
assignment operatormove constructormove-assignment operator, and
destructor. The copy and move constructors define what happens when an object is
initialized from another object of the same type. The copy- and move-assignment
operators define what happens when we assign an object of a class type to another
object of that same class type. The destructor defines what happens when an object
of the type ceases to exist. Collectively, we’ll refer to these operations as copy
control.
If a class does not define all of the copy-control members, the compiler
automatically defines the missing operations. As a result, many classes can ignore
copy control (§ 7.1.5, p. 267). However, for some classes, relying on the default
definitions leads to disaster. Frequently, the hardest part of implementing copy-control
operations is recognizing when we need to define them in the first place.
Warning
Copy control is an essential part of defining any C++ class. Programmers
new to C++ are often confused by having to define what happens when
objects are copied, moved, assigned, or destroyed. This confusion is
compounded because if we do not explicitly define these operations, the
compiler defines them for us—although the compiler-defined versions might
not behave as we intend.
13.1. Copy, Assign, and Destroy
We’ll start by covering the most basic operations, which are the copy constructor,
copy-assignment operator, and destructor. We’ll cover the move operations (which
were introduced by the new standard) in § 13.6 (p. 531).
13.1.1. The Copy Constructor
www.it-ebooks.info
C++ Primer, Fifth Edition
A constructor is the copy constructor if its first parameter is a reference to the class
type and any additional parameters have default values:
Click here to view code image
class Foo {
public:
Foo();             // default constructor
Foo(const Foo&);   // copy constructor
// ...
};
For reasons we’ll explain shortly, the first parameter must be a reference type. That
parameter is almost always a reference to const, although we can define the copy
constructor to take a reference to nonconst. The copy constructor is used implicitly
in several circumstances. Hence, the copy constructor usually should not be
explicit (§ 7.5.4, p. 296).
The Synthesized Copy Constructor
When we do not define a copy constructor for a class, the compiler synthesizes one
for us. Unlike the synthesized default constructor (§ 7.1.4, p. 262), a copy constructor
is synthesized even if we define other constructors.
As we’ll see in § 13.1.6 (p. 508), the synthesized copy constructor for some
classes prevents us from copying objects of that class type. Otherwise, the
synthesized copy constructor memberwise copies the members of its argument into
the object being created (§ 7.1.5, p. 267). The compiler copies each nonstatic
member in turn from the given object into the one being created.
The type of each member determines how that member is copied: Members of class
type are copied by the copy constructor for that class; members of built-in type are
copied directly. Although we cannot directly copy an array (§ 3.5.1, p. 114), the
synthesized copy constructor copies members of array type by copying each element.
Elements of class type are copied by using the elements’ copy constructor.
As an example, the synthesized copy constructor for our Sales_data class is
equivalent to:
Click here to view code image
class Sales_data {
public:
// other members and constructors as before
// declaration equivalent to the synthesized copy constructor
Sales_data(const Sales_data&);
private:
www.it-ebooks.info
C++ Primer, Fifth Edition
std::string bookNo;
int units_sold = 0;
double revenue = 0.0;
};
// equivalent to the copy constructor that would be synthesized for Sales_data
Sales_data::Sales_data(const Sales_data &orig):
bookNo(orig.bookNo),         // uses the string copy constructor
units_sold(orig.units_sold), // copies orig.units_sold
revenue(orig.revenue)        // copies orig.revenue
   }                       // empty body
Copy Initialization
We are now in a position to fully understand the differences between direct
initialization and copy initialization (§ 3.2.1, p. 84):
Click here to view code image
string dots(10, '.');               // direct initialization
string s(dots);                     // direct initialization
string s2 = dots;                   // copy initialization
string null_book = "9-999-99999-9"; // copy initialization
string nines = string(100, '9');    // copy initialization
When we use direct initialization, we are asking the compiler to use ordinary function
matching (§ 6.4, p. 233) to select the constructor that best matches the arguments
we provide. When we use copy initialization, we are asking the compiler to copy
the right-hand operand into the object being created, converting that operand if
necessary (§ 7.5.4, p. 294).
Copy initialization ordinarily uses the copy constructor. However, as we’ll see in §
13.6.2 (p. 534), if a class has a move constructor, then copy initialization sometimes
uses the move constructor instead of the copy constructor. For now, what’s useful to
know is when copy initialization happens and that copy initialization requires either the
copy constructor or the move constructor.
Copy initialization happens not only when we define variables using an =, but also
when we
• Pass an object as an argument to a parameter of nonreference type
• Return an object from a function that has a nonreference return type
• Brace initialize the elements in an array or the members of an aggregate class
(§ 7.5.5, p. 298)
Some class types also use copy initialization for the objects they allocate. For example,
the library containers copy initialize their elements when we initialize the container, or
when we call an insert or push member (§ 9.3.1, p. 342). By contrast, elements
created by an emplace member are direct initialized (§ 9.3.1, p. 345).
www.it-ebooks.info
C++ Primer, Fifth Edition
Parameters and Return Values
During a function call, parameters that have a nonreference type are copy initialized
(§ 6.2.1, p. 209). Similarly, when a function has a nonreference return type, the
return value is used to copy initialize the result of the call operator at the call site (§
6.3.2, p. 224).
The fact that the copy constructor is used to initialize nonreference parameters of
class type explains why the copy constructor’s own parameter must be a reference. If
that parameter were not a reference, then the call would never succeed—to call the
copy constructor, we’d need to use the copy constructor to copy the argument, but to
copy the argument, we’d need to call the copy constructor, and so on indefinitely.
Constraints on Copy Initialization
As we’ve seen, whether we use copy or direct initialization matters if we use an
initializer that requires conversion by an explicit constructor (§ 7.5.4, p. 296):
Click here to view code image
vector<int> v1(10);  // ok: direct initialization
vector<int> v2 = 10; // error: constructor that takes a size is explicit
void f(vector<int>); // f's parameter is copy initialized
f(10); // error: can't use an explicit constructor to copy an argument
f(vector<int>(10));  // ok: directly construct a temporary vector from an int
Directly initializing v1 is fine, but the seemingly equivalent copy initialization of v2 is
an error, because the vector constructor that takes a single size parameter is
explicit. For the same reasons that we cannot copy initialize v2, we cannot
implicitly use an explicit constructor when we pass an argument or return a value
from a function. If we want to use an explicit constructor, we must do so
explicitly, as in the last line of the example above.
The Compiler Can Bypass the Copy Constructor
During copy initialization, the compiler is permitted (but not obligated) to skip the
copy/move constructor and create the object directly. That is, the compiler is
permitted to rewrite
Click here to view code image
string null_book = "9-999-99999-9"; // copy initialization
into
Click here to view code image
www.it-ebooks.info
C++ Primer, Fifth Edition
string null_book("9-999-99999-9"); // compiler omits the copy
constructor
However, even if the compiler omits the call to the copy/move constructor, the
copy/move constructor must exist and must be accessible (e.g., not private) at that
point in the program.
Exercises Section 13.1.1
Exercise 13.1: What is a copy constructor? When is it used?
Exercise 13.2: Explain why the following declaration is illegal:
Click here to view code image
Sales_data::Sales_data(Sales_data rhs);
Exercise 13.3: What happens when we copy a StrBlob? What about
StrBlobPtrs?
Exercise 13.4: Assuming Point is a class type with a public copy
constructor, identify each use of the copy constructor in this program
fragment:
Click here to view code image
Point global;
Point foo_bar(Point arg)
{
Point local = arg, *heap = new Point(global);
*heap = local;
Point pa[ 4 ] = { local, *heap };
return *heap;
}
Exercise 13.5: Given the following sketch of a class, write a copy
constructor that copies all the members. Your constructor should dynamically
allocate a new string (§ 12.1.2, p. 458) and copy the object to which ps
points, rather than copying ps itself.
Click here to view code image
class HasPtr {
public:
HasPtr(const std::string &s = std::string()):
ps(new std::string(s)), i(0) { }
private:
std::string *ps;
int    i;
};
www.it-ebooks.info
Documents you may be interested
Documents you may be interested