By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,918 Members | 2,246 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,918 IT Pros & Developers. It's quick & easy.

Help with my program (code inside)

P: n/a
Hi everyone,

I'm writing a program that has to do them following

main() :
-------
3 objects are declared (two of type A and one of type B)
The function frd_fun is called for two objects (B and one of A).

C frd_fun(A a, B b)
--------------------
it returns an object of type C which contains a pointer that points to a
string. This string contains the common elements of the strings in A and B.

The description I give is short cause I don't you to write the code for me,
just point me my mistakes.

I also would like to have a destructor function for all my classes, where I
will deallocate the memory (using delete)

here is my code

// ΑΣΚΗΣΗ 2

// ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ - 7o ΕΞΑΜΗΝΟ 2003-2004

// Όνομα: ΤΖΑΚΑΣ ΑΡΓΥΡΙΟΣ

// AEM : 4625

#include <iostream>

#include <ctype.h>

using namespace std;

class B;

class C;

class A

{

private:

int n;

char* abc;

int dynam; // An einai 0 den exei ginei diniamiki katanomi mnimis

public:

A(); // Default constructor definition

A(int x); // Constructor definition

~A();

//Friend function

friend void frd_fun(A a, B b);

};

A::A()

{

dynam = 0;

cout << endl << "Default constructor A called.";

n = 10;

abc = "ABCDEFGHIJ";

}

A::A(int x)

{

dynam = 1;

cout << endl << "Constructor A called.";

n = x;

abc = new char[n+1];

cout << endl << "Dwse ena string me " << n << " xaraktires --> ";

cin >> abc;

}

A::~A()

{

// if (dynam)

// delete [] abc;

cout << endl << " H klasi A katastrafike";

}

class B

{

private:

int n;

char* abc;

public:

B(int x); // Constructor

B(){ cout << endl << "Default constructor B called.";} // Default
constructor

~B(); // Destructor

//Friend function

friend void frd_fun(A a, B b);

};

B::B(int x)

{

cout << endl << "Constructor B called.";

n = x;

abc = new char[n+1];

cout << endl << "Dwse ena string me " << n << " xaraktires --> ";

cin >> abc;

for (int i = 0; i < n; i++)

{

if (isalpha(abc[i]))

abc[i]=toupper(abc[i]);

}

}

B::~B()

{

cout << endl << " H klasi B katastrafike";

}

class C

{

private:

int n;

char* abc;

public:

C(int x); // Constructor definition

~C(); // Destructor

void setAbc(char* txt);

};

C::C(int x)

{

cout << endl << "Constructor C called.";

n = x;

abc = new char[n+1];

}

C::~C()

{

cout << endl << " H klasi B katastrafike";

}

void C::setAbc(char* txt)

{

abc = txt;

}

void frd_fun(A a, B b)

{

C c2(1);

char common_abc[10];

for (int i = 0; i < a.n; i++)

{

for (int k = 0; k < b.n; k++)

{

if (a.abc[i] == b.abc[k])

common_abc[i] = a.abc[i];

}

}

c2.setAbc(common_abc);

cout << common_abc;

}

int main()

{

int k = 0, l = 0; // ΟΡΙΣΜΑΤΑ Ν ΓΙΑ ΤΗΣ ΣΥΝΑΡΤΗΣΕΙΣ ΑΡΧΙΚΩΝ ΣΥΝΘΗΚΩΝ

// ΤΩΝ ΚΛΑΣΕΩΝ Α ΚΑΙ Β
cout << endl << "Tha oristoun 2 antikeimena typou A,"

<< endl << " ena gia kathe ekdosi tis sinartisis arxikwn sinthikwn."

<< endl << endl << "Dwse to mikos xaraktirwn tou string --> ";

cin >> k;
cout << endl << endl << "Twra tha oristei ena antikeimeno typoy B."

<< endl << "Dwse to mikos xaraktirwn tou string --> ";

cin >> l;
A a1;

A a2(k);

B b(l);

if (k > 10)

frd_fun(a2, b);

else

frd_fun(a1, b);

cout << endl;

return 0;

}
Jul 19 '05 #1
Share this Question
Share on Google+
1 Reply


P: n/a


Silver wrote:

Hi everyone,

I'm writing a program that has to do them following

main() :
-------
3 objects are declared (two of type A and one of type B)
The function frd_fun is called for two objects (B and one of A).

C frd_fun(A a, B b)
--------------------
it returns an object of type C which contains a pointer that points to a
string. This string contains the common elements of the strings in A and B.

The description I give is short cause I don't you to write the code for me,
just point me my mistakes.

I also would like to have a destructor function for all my classes, where I
will deallocate the memory (using delete)


At the moment you use the words:

dynamic allocation
destructor
class

in one sentence, the next logical question is:
What about the copy constructor and the assignment operator?

Scrolling through your source code I see: not implemented.
So looking further: is it a problem.
Again scrolling a little bit: Yes, it is.
frd_fun( A a, B b )
takes its parameters by value, thus copies of the callers arguments
are made. Since you didn't provide a copy constructor of your own, the
compiler provided one which does ... the wrong thing.

[snip a long posting of unreadable code which lacks indenting and has lots
of white lines in it]
If that doesn't answer your question, then I suggest you reread your original
posting and just using what you have written try to answer: What was the question
expressed in that posting?

--
Karl Heinz Buchegger
kb******@gascad.at
Jul 19 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.