C++ Primer, Fifth Edition
appropriate definitions for these operations if the class does not otherwise declare
them.
copy initialization Form of initialization used when we use = to supply an
initializer for a newly created object. Also used when we pass or return an object
by value and when we initialize an array or an aggregate class. Copy initialization
uses the copy constructor or the move constructor, depending on whether the
initializer is an lvalue or an rvalue.
deleted function Function that may not be used. We delete a function by
specifying = delete on its declaration. A common use of deleted functions is to
tell the compiler not to synthesize the copy and/or move operations for a class.
destructor Special member function that cleans up an object when the object
goes out of scope or is deleted. The compiler automatically destroys each data
member. Members of class type are destroyed by invoking their destructor; no
work is done when destroying members of built-in or compound type. In
particular, the object pointed to by a pointer member is not deleted by the
destructor.
lvalue reference Reference that can bind to an lvalue.
memberwise copy/assign How the synthesized copy and move constructors
and the copy- and move-assignment operators work. Taking each nonstatic
data member in turn, the synthesized copy or move constructor initializes each
member by copying or moving the corresponding member from the given object;
the copy- or move-assignment operators copy-assign or move-assign each
member from the right-hand object to the left. Members of built-in or compound
type are initialized or assigned directly. Members of class type are initialized or
assigned by using the member’s corresponding copy/move constructor or copy-
/move-assignment operator.
move Library function used to bind an rvalue reference to an lvalue. Calling move
implicitly promises that we will not use the moved-from object except to destroy it
or assign a new value to it.
move-assignment operator Version of the assignment operator that takes an
rvalue reference to its type. Typically, a move-assignment operator moves data
from the right-hand operand to the left. After the assignment, it must be safe to
run the destructor on the right-hand operand.
move constructor Constructor that takes an rvalue reference to its type.
Typically, a move constructor moves data from its parameter into the newly
created object. After the move, it must be safe to run the destructor on the given
argument.
move iterator Iterator adaptor that generates an iterator that, when
dereferenced, yields an rvalue reference.
www.it-ebooks.info
Convert pdf to powerpoint slides - 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
online pdf converter to powerpoint; convert pdf to powerpoint online no email
Convert pdf to powerpoint slides - 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
picture from pdf to powerpoint; adding pdf to powerpoint
C++ Primer, Fifth Edition
overloaded operator Function that redefines the meaning of an operator when
applied to operand(s) of class type. This chapter showed how to define the
assignment operator; Chapter 14 covers overloaded operators in more detail.
reference count Programming technique often used in copy-control members. A
reference count keeps track of how many objects share state. Constructors (other
than copy/move constructors) set the reference count to 1. Each time a new copy
is made the count is incremented. When an object is destroyed, the count is
decremented. The assignment operator and the destructor check whether the
decremented reference count has gone to zero and, if so, they destroy the object.
reference qualifier Symbol used to indicate that a nonstatic member function
can be called on an lvalue or an rvalue. The qualifier, & or &&, follows the
parameter list or the const qualifier if there is one. A function qualified by & may
be called only on lvalues; a function qualified by && may be called only on
rvalues.
rvalue reference Reference to an object that is about to be destroyed.
synthesized assignment operator A version of the copy- or move-assignment
operator created (synthesized) by the compiler for classes that do not explicitly
define assignment operators. Unless it is defined as deleted, a synthesized
assignment operator memberwise assigns (moves) the right-hand operand to the
left.
synthesized copy/move constructor A version of the copy or move
constructor that is generated by the compiler for classes that do not explicitly
define the corresponding constructor. Unless it is defined as deleted, a
synthesized copy or move constructor memberwise initializes the new object by
copying or moving members from the given object, respectively.
synthesized destructor Version of the destructor created (synthesized) by the
compiler for classes that do not explicitly define one. The synthesized destructor
has an empty function body.
Chapter 14. Overloaded Operations and
Conversions
Contents
Section 14.1 Basic Concepts
Section 14.2 Input and Output Operators
Section 14.3 Arithmetic and Relational Operators
www.it-ebooks.info
C# PowerPoint - How to Process PowerPoint
Microsoft PowerPoint Document Processing Control in Visual C#.NET of RasterEdge .NET Imaging SDK is a reliable and professional PowerPoint slides/pages editing
how to convert pdf to powerpoint; convert pdf to editable ppt online
VB.NET PowerPoint: Process & Manipulate PPT (.pptx) Slide(s)
add image to slide, extract slides and merge library SDK, this VB.NET PowerPoint processing control powerful & profession imaging controls, PDF document, image
pdf to powerpoint conversion; pdf to ppt
C++ Primer, Fifth Edition
Section 14.4 Assignment Operators
Section 14.5 Subscript Operator
Section 14.6 Increment and Decrement Operators
Section 14.7 Member Access Operators
Section 14.8 Function-Call Operator
Section 14.9 Overloading, Conversions, and Operators
Chapter Summary
Defined Terms
In Chapter 4, we saw that C++ defines a large number of operators and automatic
conversions among the built-in types. These facilities allow programmers to write a
rich set of mixed-type expressions.
C++ lets us define what the operators mean when applied to objects of class type.
It also lets us define conversions for class types. Class-type conversions are used like
the built-in conversions to implicitly convert an object of one type to another type
when needed.
Operator overloading lets us define the meaning of an operator when applied to
operand(s) of a class type. Judicious use of operator overloading can make our
programs easier to write and easier to read. As an example, because our original
Sales_item class type (§ 1.5.1, p. 20) defined the input, output, and addition
operators, we can print the sum of two Sales_items as
Click here to view code image
cout << item1 + item2;  // print the sum of two Sales_items
In contrast, because our Sales_data class (§ 7.1, p. 254) does not yet have
overloaded operators, code to print their sum is more verbose and, hence, less clear:
Click here to view code image
print(cout, add(data1, data2));  // print the sum of two Sales_datas
14.1. Basic Concepts
Overloaded operators are functions with special names: the keyword operator
followed by the symbol for the operator being defined. Like any other function, an
overloaded operator has a return type, a parameter list, and a body.
An overloaded operator function has the same number of parameters as the
operator has operands. A unary operator has one parameter; a binary operator has
two. In a binary operator, the left-hand operand is passed to the first parameter and
www.it-ebooks.info
VB.NET PowerPoint: Sort and Reorder PowerPoint Slides by Using VB.
clip art or screenshot to PowerPoint document slide large amount of robust PPT slides/pages editing powerful & profession imaging controls, PDF document, image
how to convert pdf slides to powerpoint presentation; pdf picture to powerpoint
VB.NET PowerPoint: Use PowerPoint SDK to Create, Load and Save PPT
Besides, users also can get the precise PowerPoint slides count as soon as the PowerPoint document has been loaded by using the page number getting method.
how to add pdf to powerpoint slide; conversion of pdf to ppt online
C++ Primer, Fifth Edition
the right-hand operand to the second. Except for the overloaded function-call
operator, operator(), an overloaded operator may not have default arguments (§
6.5.1, p. 236).
If an operator function is a member function, the first (left-hand) operand is bound
to the implicit this pointer (§ 7.1.2, p. 257). Because the first operand is implicitly
bound to this, a member operator function has one less (explicit) parameter than
the operator has operands.
Note
When an overloaded operator is a member function, this is bound to the
left-hand operand. Member operator functions have one less (explicit)
parameter than the number of operands.
An operator function must either be a member of a class or have at least one
parameter of class type:
Click here to view code image
// error: cannot redefine the built-in operator for ints
int operator+(int, int);
This restriction means that we cannot change the meaning of an operator when
applied to operands of built-in type.
We can overload most, but not all, of the operators. Table 14.1 shows whether or
not an operator may be overloaded. We’ll cover overloading new and delete in §
19.1.1 (p. 820).
Table 14.1. Operators
We can overload only existing operators and cannot invent new operator symbols.
For example, we cannot define operator** to provide exponentiation.
Four symbols (+, -, *, and &) serve as both unary and binary operators. Either or
both of these operators can be overloaded. The number of parameters determines
www.it-ebooks.info
VB.NET PowerPoint: Extract & Collect PPT Slide(s) Using VB Sample
want to combine these extracted slides into a please read this VB.NET PowerPoint slide processing powerful & profession imaging controls, PDF document, image
how to convert pdf file to powerpoint presentation; how to convert pdf to powerpoint on
VB.NET PowerPoint: Merge and Split PowerPoint Document(s) with PPT
of the split PPT document will contain slides/pages 1-4 code in VB.NET to finish PowerPoint document splitting If you want to see more PDF processing functions
and paste pdf into powerpoint; change pdf to powerpoint online
C++ Primer, Fifth Edition
which operator is being defined.
An overloaded operator has the same precedence and associativity (§ 4.1.2, p. 136)
as the corresponding built-in operator. Regardless of the operand types
x == y + z;
is always equivalent to x == (y + z).
Calling an Overloaded Operator Function Directly
Ordinarily, we “call” an overloaded operator function indirectly by using the operator
on arguments of the appropriate type. However, we can also call an overloaded
operator function directly in the same way that we call an ordinary function. We name
the function and pass an appropriate number of arguments of the appropriate type:
Click here to view code image
// equivalent calls to a nonmember operator function
data1 + data2;           // normal expression
operator+(data1, data2); // equivalent function call
These calls are equivalent: Both call the nonmember function operator+, passing
data1 as the first argument and data2 as the second.
We call a member operator function explicitly in the same way that we call any
other member function. We name an object (or pointer) on which to run the function
and use the dot (or arrow) operator to fetch the function we wish to call:
Click here to view code image
data1 += data2;             // expression-based ''call''
data1.operator+=(data2);    // equivalent call to a member operator
function
Each of these statements calls the member function operator+=, binding this to
the address of data1 and passing data2 as an argument.
Some Operators Shouldn’t Be Overloaded
Recall that a few operators guarantee the order in which operands are evaluated.
Because using an overloaded operator is really a function call, these guarantees do
not apply to overloaded operators. In particular, the operand-evaluation guarantees of
the logical 
AND
, logical 
OR
(§ 4.3, p. 141), and comma (§ 4.10, p. 157) operators are
not preserved. Moreover, overloaded versions of && or || operators do not preserve
short-circuit evaluation properties of the built-in operators. Both operands are always
evaluated.
Because the overloaded versions of these operators do not preserve order of
www.it-ebooks.info
VB.NET PowerPoint: Complete PowerPoint Document Conversion in VB.
VB.NET PowerPoint Conversion Control to render and convert target PowerPoint document to various image or document formats, such as PDF, BMP, TIFF
convert pdf document to powerpoint; convert pdf to ppt online
VB.NET PowerPoint: Convert & Render PPT into PDF Document
Using this VB.NET PowerPoint to PDF converting demo code below, you can easily convert all slides of source PowerPoint document into a multi-page PDF file.
change pdf to powerpoint on; change pdf to powerpoint
C++ Primer, Fifth Edition
evaluation and/or short-circuit evaluation, it is usually a bad idea to overload them.
Users are likely to be surprised when the evaluation guarantees they are accustomed
to are not honored for code that happens to use an overloaded version of one of
these operators.
Another reason not to overload comma, which also applies to the address-of
operator, is that unlike most operators, the language defines what the comma and
address-of operators mean when applied to objects of class type. Because these
operators have built-in meaning, they ordinarily should not be overloaded. Users of
the class will be surprised if these operators behave differently from their normal
meanings.
Best Practices
Ordinarily, the comma, address-of, logical 
AND
, and logical 
OR
operators
should 
not
be overloaded.
Use Definitions That Are Consistent with the Built-in Meaning
When you design a class, you should always think first about what operations the
class will provide. Only after you know what operations are needed should you think
about whether to define each operation as an ordinary function or as an overloaded
operator. Those operations with a logical mapping to an operator are good candidates
for defining as overloaded operators:
• If the class does IO, define the shift operators to be consistent with how IO is
done for the built-in types.
• If the class has an operation to test for equality, define operator==. If the
class has operator==, it should usually have operator!= as well.
• If the class has a single, natural ordering operation, define operator<. If the
class has operator<, it should probably have all of the relational operators.
• The return type of an overloaded operator usually should be compatible with the
return from the built-in version of the operator: The logical and relational
operators should return bool, the arithmetic operators should return a value of
the class type, and assignment and compound assignment should return a
reference to the left-hand operand.
Assignment and Compound Assignment Operators
Assignment operators should behave analogously to the synthesized operators: After
an assignment, the values in the left-hand and right-hand operands should have the
same value, and the operator should return a reference to its left-hand operand.
Overloaded assignment should generalize the built-in meaning of assignment, not
www.it-ebooks.info
VB.NET PowerPoint: Add Image to PowerPoint Document Slide/Page
insert or delete any certain PowerPoint slide without methods to reorder current PPT slides in both powerful & profession imaging controls, PDF document, tiff
convert pdf file into ppt; how to change pdf file to powerpoint
C# PowerPoint: C# Guide to Add, Insert and Delete PPT Slide(s)
file and it includes all slides and properties to view detailed guide for each PowerPoint slide processing & profession imaging controls, PDF document, tiff
convert pdf into ppt; convert pdf to powerpoint with
C++ Primer, Fifth Edition
circumvent it.
Caution: Use Operator Overloading Judiciously
Each operator has an associated meaning from its use on the built-in types.
Binary +, for example, is strongly identified with addition. Mapping binary +
to an analogous operation for a class type can provide a convenient
notational shorthand. For example, the library string type, following a
convention common to many programming languages, uses + to represent
concatenation—“adding” one string to the other.
Operator overloading is most useful when there is a logical mapping of a
built-in operator to an operation on our type. Using overloaded operators
rather than inventing named operations can make our programs more natural
and intuitive. Overuse or outright abuse of operator overloading can make
our classes incomprehensible.
Obvious abuses of operator overloading rarely happen in practice. As an
example, no responsible programmer would define operator+ to perform
subtraction. More common, but still inadvisable, are uses that contort an
operator’s “normal” meaning to force a fit to a given type. Operators should
be used only for operations that are likely to be unambiguous to users. An
operator has an ambiguous meaning if it plausibly has more than one
interpretation.
If a class has an arithmetic (§ 4.2, p. 139) or bitwise (§ 4.8, p. 152) operator, then
it is usually a good idea to provide the corresponding compound-assignment operator
as well. Needless to say, the += operator should be defined to behave the same way
the built-in operators do: it should behave as + followed by =.
Choosing Member or Nonmember Implementation
When we define an overloaded operator, we must decide whether to make the
operator a class member or an ordinary nonmember function. In some cases, there is
no choice—some operators are required to be members; in other cases, we may not
be able to define the operator appropriately if it is a member.
The following guidelines can be of help in deciding whether to make an operator a
member or an ordinary nonmember function:
• The assignment (=), subscript ([]), call (()), and member access arrow (->)
operators 
must
be defined as members.
• The compound-assignment operators ordinarily 
ought
to be members. However,
unlike assignment, they are not required to be members.
• Operators that change the state of their object or that are closely tied to their
www.it-ebooks.info
C++ Primer, Fifth Edition
given type—such as increment, decrement, and dereference—usually should be
members.
• Symmetric operators—those that might convert either operand, such as the
arithmetic, equality, relational, and bitwise operators—usually should be defined
as ordinary nonmember functions.
Programmers expect to be able to use symmetric operators in expressions with
mixed types. For example, we can add an int and a double. The addition is
symmetric because we can use either type as the left-hand or the right-hand operand.
If we want to provide similar mixed-type expressions involving class objects, then the
operator must be defined as a nonmember function.
When we define an operator as a member function, then the left-hand operand
must be an object of the class of which that operator is a member. For example:
Click here to view code image
string s = "world";
string t = s + "!";  // ok: we can add a const char* to a string
string u = "hi" + s; // would be an error if + were a member of string
If operator+ were a member of the string class, the first addition would be
equivalent to s.operator+("!"). Likewise, "hi" + s would be equivalent to
"hi".operator+(s). However, the type of "hi" is const char*, and that is a
built-in type; it does not even have member functions.
Because string defines + as an ordinary nonmember function, "hi" + s is
equivalent to operator+("hi", s). As with any function call, either of the
arguments can be converted to the type of the parameter. The only requirements are
that at least one of the operands has a class type, and that both operands can be
converted (unambiguously) to string.
Exercises Section 14.1
Exercise 14.1: In what ways does an overloaded operator differ from a
built-in operator? In what ways are overloaded operators the same as the
built-in operators?
Exercise 14.2: Write declarations for the overloaded input, output, addition,
and compound-assignment operators for Sales_data.
Exercise 14.3: Both string and vector define an overloaded == that can
be used to compare objects of those types. Assuming svec1 and svec2 are
vectors that hold strings, identify which version of == is applied in each
of the following expressions:
(a) "cobble" == "stone"
(b) svec1[0] == svec2[0]
(c) svec1 == svec2
www.it-ebooks.info
C++ Primer, Fifth Edition
(d) "svec1[0] == "stone"
Exercise 14.4: Explain how to decide whether the following should be class
members:
(a) %
(b) %=
(c) ++
(d) ->
(e) <<
(f) &&
(g) ==
(h) ()
Exercise 14.5: In exercise 7.40 from § 7.5.1 (p. 291) you wrote a sketch of
one of the following classes. Decide what, if any, overloaded operators your
class should provide.
(a) Book
(b) Date
(c) Employee
(d) Vehicle
(e) Object
(f) Tree
14.2. Input and Output Operators
As we’ve seen, the IO library uses >> and << for input and output, respectively. The
IO library itself defines versions of these operators to read and write the built-in types.
Classes that support IO ordinarily define versions of these operators for objects of the
class type.
14.2.1. Overloading the Output Operator <<
Ordinarily, the first parameter of an output operator is a reference to a nonconst
ostream object. The ostream is nonconst because writing to the stream changes
its state. The parameter is a reference because we cannot copy an ostream object.
www.it-ebooks.info
C++ Primer, Fifth Edition
The second parameter ordinarily should be a reference to const of the class type
we want to print. The parameter is a reference to avoid copying the argument. It can
be const because (ordinarily) printing an object does not change that object.
To be consistent with other output operators, operator<< normally returns its
ostream parameter.
The 
Sales_data
Output Operator
As an example, we’ll write the Sales_data output operator:
Click here to view code image
ostream &operator<<(ostream &os, const Sales_data &item)
{
os << item.isbn() << " " << item.units_sold << " "
<< item.revenue << " " << item.avg_price();
return os;
}
Except for its name, this function is identical to our earlier print function (§ 7.1.3, p.
261). Printing a Sales_data entails printing its three data elements and the
computed average sales price. Each element is separated by a space. After printing
the values, the operator returns a reference to the ostream it just wrote.
Output Operators Usually Do Minimal Formatting
The output operators for the built-in types do little if any formatting. In particular,
they do not print newlines. Users expect class output operators to behave similarly. If
the operator does print a newline, then users would be unable to print descriptive text
along with the object on the same line. An output operator that does minimal
formatting lets users control the details of their output.
Best Practices
Generally, output operators should print the contents of the object, with
minimal formatting. They should not print a newline.
IO Operators Must Be Nonmember Functions
Input and output operators that conform to the conventions of the iostream library
must be ordinary nonmember functions. These operators cannot be members of our
own class. If they were, then the left-hand operand would have to be an object of our
class type:
www.it-ebooks.info
Documents you may be interested
Documents you may be interested