1. I'm making a program with a default constructor and an overloaded constructor. They're both called by different rules and produces a testline of text when called. The assignment is to give the overloaded constructor default arguments to see what happens. I wonder, what is a default argument i an overloaded constructor?
ans: i am sorry but i dont understand what are u trying to convey here. Post the same question with some examples on how you are going to implement it.
2. How do you instance an object from a class in different scope?
ans: Just create the object a normal way but just keep in mind that that instance of the object will only be valid for that same scope and not beyond it.
3. How do you send an object "by value" to a function?
ans: Objects and variables are by default sent by value. To send the object by reference you can do pass by reference using the C++ reference mechanism or the old C style pointer mechanism.
4. How do you make a function which swaps the values of two indexes on a vector (like swaps numbers[1] with numbers[2])?
ans: The ans to this lies in the prev question. To make function reflect teh changes done to the variables beyond the function scope you need to pass the variable using the pass by reference mechanism.
I would very much recommend you to get all your objected oriented and C++ basic concepts cleared before attempting something like vectors.
Here is ur updated code which i think will work now. Just look out for the changes i have made.
#include <iostream>
#include <vector>
using namespace std;
bool swap_values(vector<int>& numbers);
int main ()
{
vector<int> numbers(2);
cout << "Let's swap vector values\n";
cout << "Enter value 1 " << endl;
cin >> numbers[0];
cout << "Enter value 2 " << endl;
cin >> numbers[1];
// indexing starts at 0 and not 1 so the first element is indexed by
// numbers [0] and not numbers [1].
cout << "vector 1: " << numbers[0] << endl;
cout << "vector 2: " << numbers[1] << endl;
swap_values(numbers);
cout << "vector 1: " << numbers[0] << endl;
cout << "vector 2: " << numbers[1] << endl;
cin.get(); cin.get();
return 0;
}
// btw what type of swap were u planning to implement using three values ???
// i thought u would want a swap with 2 values and changed the program likewise.
bool swap_values(vector<int>& numbers)
{
// better make the function return bool instead of the old style "int"
int temp = numbers[1] ;
numbers[1] = numbers[0];
numbers[0] = numbers[1];
return true;
}
Hope it helped, bye.
~s.o.s~
Failure as a human
11,938 posts since Jun 2006
Reputation Points: 3,281
Solved Threads: 734
1. I'm making a program with a default constructor and an overloaded constructor. They're both called by different rules and produces a testline of text when called. The assignment is to give the overloaded constructor default arguments to see what happens. I wonder, what is a default argument i an overloaded constructor?
I believe that's this kinda thing.
#include <iostream>
class T
{
int a,b,c; // private data
public:
T(int a_ = 0, int b_ = 0, int c_ = 0) : a(a_), b(b_), c(c_)
{
std::cout << "default constructor with default arguments:\n";
std::cout << "a = " << a << ',';
std::cout << "b = " << b << ',';
std::cout << "c = " << c << '\n';
}
};
int main(int argc, char *argv[])
{
T t(1), u(1,2,3);
return 0;
}
/* my output
default constructor with default arguments:
a = 1,b = 0,c = 0
default constructor with default arguments:
a = 1,b = 2,c = 3
*/
[edit] http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.3
Dave Sinkula
long time no c
5,058 posts since Apr 2004
Reputation Points: 2,780
Solved Threads: 314
1. I'm making a program with a default constructor and an overloaded constructor. They're both called by different rules and produces a testline of text when called. The assignment is to give the overloaded constructor default arguments to see what happens. I wonder, what is a default argument i an overloaded constructor?
Lets take class A such that
class A
{
int i;
int j;
}
A default constructor is a constructor that doesn't take any arguments.
e.g. A::A();
An overloaded constructor is a constructor that takes arguments.
e.g
A::A(int int_i, int int_j )
{
i = int_i;
j = int_j;
};
you can use the values of int_i and int_j to assign values for class A's member variables i and j .
If you write the overloaded constructor like this,
A::A(int int_i, int int_j = 0)
{
i = int_i;
j = int_j;
};
calling the constructor like A a(2) , will create an object a with a.i = 2 and a.j = 0;
calling the constructor like A a(2,9) , will create an object a with a.i = 2 and a.j = 9;
If you have a default constructor defined, don't make all the arguments of the overloaded constructor default arguments. That is because the compiler will not be able to tell the difference between the two constructors.2. How do you instance an object from a class in different scope?
I think you are asking about something like this.
Class B is defined in Class A.So B is defined inside the scope of A. To create an instance of B, you should do something like this.
#include <iostream>
class A
{
public:
class B
{
public:
int i;
};
};
int main()
{
A::B b;
b.i = 9;
std::cout << b.i << std::endl;
}
3. How do you send an object "by value" to a function?
like this.
class A
{
...
}
int some_function_that_takes_an_object_of_class_A( A a )
{
.....
}
int main()
{
A a;
some_function_that_takes_an_object_of_class_A( a ); // sends a copy of a. the original a is not changed.
}
~sos~ has answered question 4.
WolfPack
Postaholic
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115
WolfPack
Postaholic
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115
The classic and the best way to keep track of the instances created is using the static int counter; member variable in your class. The speciality of "static" variable is that for any number of instances of the class created they all have a common copy of the instance variable. So any changes made to the instance variable using one object will be refleceted when the variable is accessed using the next object.
Maybe something like
#include <iostream>
using namespace std;
class Person
{
public:
string first_name;
string last_name;
string month;
int year;
int day;
Person();
Person(string first_name, string last_name);
~Person();
void getinfo();
void setinfo();
void deleter();
void count_instance();
static int getCount ( );
static void incrCount ( );
private:
int *pointer;
static int counter;
};
int main ()
{
Person enter;
Person pass;
Person testing();
int *pointer;
pointer = new int;
enter.setinfo();
cout << "Test: The pointer is: " << *pointer << endl;
enter.getinfo();
enter.deleter();
cout << "Test: The pointer is: " << *pointer << endl;
enter = Person(enter.first_name, enter.last_name);
cout << "\nThe object count is" << Person::getCount(); // call to static function of class
cin.get();
return 0;
}
void Person::setinfo()
{
counter = 0;
cout << "counter is: " << counter;
cout << "Name1?" << endl;
cin >> first_name;
cout << endl << "Name2?" << endl;
cin >> last_name;
cout << endl << "Year?" << endl;
cin >> year;
cout << endl << "Month?" << endl;
cin >> month;
cout << endl << "Day?" << endl;
cin >> day;
}
void Person::getinfo()
{
cout << first_name << " " << last_name << " " << year << " " << month << " " << day;
}
void Person::count_instance()
{
cout << "counter is: " << counter;
}
void Person::deleter()
{
delete [] pointer;
}
Person::Person()
{
Person::incrCount ( );
cout << "Def Constructor!" << endl;
}
Person::Person(string first_name, string last_name)
{
Person::inctCount ( );
cout << "Overloaded Constructor!" << endl;
}
Person::~Person()
{
cout << "DESTRUCTOR!" << endl;
}
static void incrCount ( )
{
Person::count ++ ;
}
static int getCount ( )
{
return Person::count ;
}
HOpe it helped, bye.
~s.o.s~
Failure as a human
11,938 posts since Jun 2006
Reputation Points: 3,281
Solved Threads: 734
There is a spelling mistake in the constructor.
Change this
Person::Person(string first_name, string last_name)
{
Person::inctCount ( );
cout << "Overloaded Constructor!" << endl;
}
to this.
Person::Person(string first_name, string last_name)
{
Person::incrCount ( );
cout << "Overloaded Constructor!" << endl;
}
Change these also
static void incrCount ( )
{
Person::counter ++ ;
}
static int getCount ( )
{
return Person::counter ;
}
WolfPack
Postaholic
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115
~s.o.s~ --> I tried running your modified program, but I got some errors when running it in Bloodshed Dev-C++.
This is what the log says:
In constructor `Person::Person(std::string, std::string)':
Line 89 `inctCount' is not a member of `Person'
In function `void incrCount()':
Line 101 `count' is not a member of `Person'
In function `int getCount()':
Line 106 `count' is not a member of `Person'
Any idea why it does this?
Thanks!
Oh i am very sorry, it was a spelling mistake on my part.
Anyways as you can see Mod. Wolfpack has already corrected the mistake for me (thanks to him for that).
If any problem persists, dont hesitate to post again.
~s.o.s~
Failure as a human
11,938 posts since Jun 2006
Reputation Points: 3,281
Solved Threads: 734
Thanks for the help! :)
But it still doesn't work properly.. It complains that the variable 'counter' is a private variable.. And it doesn't work if I cange it into a public one.
Any clues why?
The answer to this is in the web link I gave you in my reply. Something about the static variable being initialized globally. See if you can find it.EDIT: I've also got another question if someone knows the answer..
I'm working on an assignment where you have to take an object of a class and have it as an membervariable of another class. How do I do this?
class A
{
public:
int a;
};
class B
{
public:
A member_var_of_instance_A;
}
WolfPack
Postaholic
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115