f



How to understand that there are both "virtual ~Number();" and "Number::~Number()"?

Hi,

When I read the example class, I feel puzzled about "Number::~Number()"
after there is 

virtual ~Number();

I remember that the derived class of Number should have a real 
 ~Number();


Now, class Number has both virtual and member function
~Number().


Can you help me on this question?


Thanks for the expert keeping answer my questions.






////////////////////////////
struct BaseConstructor 
{ 
	BaseConstructor(int=0) 
	{} 
};

class RealNumber;
class Complex;
class Number;
class Number
{
	 friend class RealNumber;
	 friend class Complex;
 public:
	 Number ();
	 Number & operator = (const Number &n);
	 Number (const Number &n);
	 virtual ~Number();
	 virtual Number operator + (Number const &n) const;
	 void swap (Number &n) throw ();

	 static Number makeReal (double r);
	 static Number makeComplex (double rpart, double ipart);
 protected:
	 Number (BaseConstructor);

 private:
	 void redefine (Number *n);
	 virtual Number complexAdd (Number const &n) const;
	 virtual Number realAdd (Number const &n) const;

	 Number *rep;
	 short referenceCount;
};

Number::~Number()
{
 if (rep && --rep->referenceCount == 0)
 delete rep;
}
0
fl
6/15/2015 3:31:02 AM
comp.lang.c++ 49423 articles. 6 followers. Post Follow

2 Replies
595 Views

Similar Articles

[PageSpeed] 13

[Please do not mail me a copy of your followup]

What book is this you're reading so I can make sure *not* to recommend
it to anyone? LOL.  I find the snippets you're posting to leave a
reader new to the language more confused than enlightened and they
often seem to exhibit poor practices and conventions.  Introducing
someone to the language with poor practices and conventions is IMO a
really bad way to teach C++.

fl <rxjwg98@gmail.com> spake the secret code
<265510a8-466d-4f31-b63a-fb8c1e210cc0@googlegroups.com> thusly:

>I remember that the derived class of Number should have a real 
> ~Number();

If a class is designed to be used as a base class with virtual methods
that provide 'extension points' from the base class, such a base class
should have a virtual destructor.

The reason for this is that virtual methods are the mechanism by which
we obtain run-time polymorphism for a class hierarchy.  In such a
sitaution, the user of such class is interacting with the class
through a pointer to the base class.  When an instance of the class is
destroyed by operator delete, the virtual destructor ensures that the
destructor associated with the actual derived instance of the base is
invoked.  If the destructor were not virtual, only the base class
would be destroyed and the object would not be properly destroyed.

>Now, class Number has both virtual and member function
>~Number().

It declares the destructor virtual and then defines the destructor.

>	 virtual ~Number();

This is a declaration.

>Number::~Number()
>{
> if (rep && --rep->referenceCount == 0)
> delete rep;
>}

This is a definition.  When a virtual method is defined outside the
class declaration, the 'virtual' keyword is not allowed because only
declarations are marked virtual, not definitions.
-- 
"The Direct3D Graphics Pipeline" free book <http://tinyurl.com/d3d-pipeline>
     The Computer Graphics Museum <http://computergraphicsmuseum.org>
         The Terminals Wiki <http://terminals.classiccmp.org>
  Legalize Adulthood! (my blog) <http://legalizeadulthood.wordpress.com>
0
legalize
6/15/2015 3:52:54 AM
fl <rxjwg98@gmail.com> wrote in news:265510a8-466d-4f31-b63a-fb8c1e210cc0
@googlegroups.com:

> Hi,
> 
> When I read the example class, I feel puzzled about "Number::~Number()"
> after there is 
> 
> virtual ~Number();
> 
> I remember that the derived class of Number should have a real 
>  ~Number();

It looks like you are thinking that a virtual function may not have a 
definition. This is not what 'virtual' means in C++, even pure virtual 
functions can have definitions. Find a decent C++ tutorial and reread the 
introduction to virtual member functions.
0
Paavo
6/15/2015 6:23:38 AM
Reply:

Similar Artilces:

""""""""""""""""""""""ADD ME""""""""""""""""""""
Hi , Hope you are doing great. Please let me take this opportunity to introduce myself, Iam Karthik working with BhanInfo Inc, a NY based company. We have consultants on our bench on various technologies, my request is to add me to your distribution list and kindly do send me the requirements. i have the below list available 1. Mainframe 2. Java 3.. Financial Analyst 4. Data Architect If there is any vendor ship agreement which has to be signed then I would like to take an opportunity to represent my company and expect your cooperation... We look forward to build a ve...

"""""""""ADD ME""""""""""
Hi , Hope you are doing great. Please let me take this opportunity to introduce myself, Iam Karthik working with BhanInfoi Inc, a NY based company. We have consultants on our bench on various technologies, my request is to add me to your distribution list and kindly do send me the requirements. i have the below list available 1. Mainframe 2. Java 3.. Financial Analyst 4. Data Architect If there is any vendor ship agreement which has to be signed then I would like to take an opportunity to represent my company and expect your cooperation... ...

Urgent Requirement in """""""""""""NEW YORK""""""""""""""""
Hello Partners, Please find the requirement below. Please send the updated resume along with rate and contact no. REQ#1: Title : Java Developer ( Rating Project) Duration : 6 months Rate : open Location : NY strong java, WebLogic 9.2, Web Services, Oracle REQ#2: Title : Java Developer Duration : 4 months Rate : open Location : NY Strong java, SQL REQ#3: Title : VB.Net Consultant Location : NY Duration : 4 months Rate : open Primarily looking at someone who has Excel, VB.net a...

"my" and "our"
Hi, while testing a program, I erroneously declared the same variable twice within a block, the first time with "my", the second time with "our": { my $fz = 'VTX_Link'; .... ( around 200 lines of code, all in the same block) our $fz = 'VTX_Linkset'; ... } So the initial contents of the $fz declared with "my" is lost, because "our" creates a lexical alias for the global $fz, thus overwriting the previous "my" declaration. It was my error, no question. But I wonder why Perl doesn't mention this - even with "use s...

"out" and "in out"
Hi i found the following explaination: In Ada, "in" parameters are similar to C++ const parameters. They are effectively read-only within the scope of the called subprogram. Ada "in out" parameters have a reliable initial value (that passed in from the calling subprogram) and may be modified within the scope of the called procedure. Ada "out" parameters have no reliable initial value, but are expected to be assigned a value within the called procedure. What does "have no reliable initial value" mean when considering the "out" parameter? By c...

about "++" and "--"
why this program snippet display "8,7,7,8,-7,-8" the program is: main() { int i=8; printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--); } > why this program snippet display "8,7,7,8,-7,-8" Ask your compiler-vendor because this result is IMHO implementation-defined. Check this out: http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.15 http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.16 Regards, Irina Marudina fxc123@gmail.com wrote: > why this program snippet display "8,7,7,8,-7,-8&q...

"or" and "and"
Hi, I'm just getting to discover ruby, but I find it very nice programming language. I just still don't understand how the "or" and "and" in ruby... I was playing with ruby and for example made a def to print Stem and Leaf plot (for those who didn't have a statistics course or slept on it, e.g. http://cnx.org/content/m10157/latest/) Here is the Beta version of it: class Array def n ; self.size ; end def stem_and_leaf(st = 1) # if st != (2 or 5 or 10) then ; st = 1 ; end k = Hash.new(0) self.each {|x| k[x.to_f] += 1 } k = k.sort{|a, b| a[0].to_f <=&g...

why "::", not "."
Why does the method of modules use a dot, and the constants a double colon? e.g. Math::PI and Math.cos -- Posted via http://www.ruby-forum.com/. On Oct 26, 2010, at 01:48 , Oleg Igor wrote: > Why does the method of modules use a dot, and the constants a double > colon? > e.g. > Math::PI and Math.cos For the same reason why inner-classes/modules use double colon, because = they're constants and that's how you look up via constant namespace. Math::PI and ActiveRecord::Base are the same type of lookup... it is = just that Base is a module and PI is a float....

"/a" is not "/a" ?
Hi everybody, while testing a module today I stumbled on something that I can work around but I don't quite understand. >>> a = "a" >>> b = "a" >>> a == b True >>> a is b True >>> c = "/a" >>> d = "/a" >>> c == d True # all good so far >>> c is d False # eeeeek! Why c and d point to two different objects with an identical string content rather than the same object? Manu Emanuele D'Arrigo wrote: >>>> c = "/a" >>>&...

"If then; if then;" and "If then; if;"
I have a raw data set which is a hierarchical file: H 321 s. main st P Mary E 21 F P william m 23 M P Susan K 3 F H 324 S. Main St I use the folowing code to read the data to creat one observation per detail(P) record including hearder record(H): data test; infile 'C:\Documents and Settings\retain.txt'; retain Address; input type $1. @; if type='H' then input @3 Address $12.; if type='P' then input @3 Name $10. @13 Age 3. @16 Gender $1.; run; but the output is not what I want: 1 321 s. main H 2 321 s. main P Mary E 21 F 3 321 s...

Urgent Requirement for """""""""""""""INFORMATICA DEVELOPER"""""""""""""
Hello Partners, How are you ? Please find the requirements below. Title: Database/ETL Developer Duration: 6 months Location: NY Exp: 7+ Locals preferred Database/ETL requirements (Mandatory) Candidate must have worked with financial instruments, preferably Mutual Funds but, Equities are also ok. PL/SQL - packages, Stored procs, Functions, Aggregate functions, Pipelined Functions Informatica 8.6 - especially complex mappings, complex maplets, complex workflows, transformations Oracle 10g/11g Unix/Linux shell scripting ...

Urgent need """""""""""INFORMATICA DEVELOPER"""""""""""""
Hello Partners, How are you ? Please find the requirements below. Title: Database/ETL Developer Duration: 6 months Location: NY Exp: 7+ Locals preferred Database/ETL requirements (Mandatory) Candidate must have worked with financial instruments, preferably Mutual Funds but, Equities are also ok. PL/SQL - packages, Stored procs, Functions, Aggregate functions, Pipelined Functions Informatica 8.6 - especially complex mappings, complex maplets, complex workflows, transformations Oracle 10g/11g Unix/Linux shell scripting Database/ETL requirements (Optional) ...

["a", "b", "c", "d"] to "a, b, c, d"?
I want to process each element of an array, but the last element should be handled special. Here is an example: def p_ary(ary) str = "" ary.each do |elem| str << elem << ", " end str.chomp!(", ") str end so p_ary(["a", "f", "x", "test"]) produces "a, f, x, test". The code works, but isn't there an easier and more general way for this behaviour? martinus On Tue, 06 Apr 2004 04:23:22 -0700, Martin wrote: > I want to process each element of an array, but the last ele...

A problem about "[ ]" "( )" "="
I want to read several images saved in a director,and give them to I1,I2 ,I3....,using the following codes: filelist=dir(['c:\MATLAB701\work\...\*.jpg']); for i=1 :length(filelist) I=imread(fullfile('c:\MATLAB701\work\...',filelist(i).name)); end; but failed. Then I used I(i)=imread... ,still failed. How could I do? "John" <mailofww@126.com> wrote in message news:ef19e12.-1@webx.raydaftYaTP... >I want to read several images saved in a director,and give them to > I1,I2 ,I3....,using the following codes: > filelist=dir(['c:\MATLAB701\work\.....

Web resources about - How to understand that there are both "virtual ~Number();" and "Number::~Number()"? - comp.lang.c++

Resources last updated: 1/25/2016 1:43:38 PM