arcull
21st July 2014, 13:30
Hi there. To make it clear, I'm no OOP, C++ or Qt expert, so I made a few simple functions to clear up a few things about objects and pointer to objects. Here is the code, a class named cat:
class Cat {
public:
void SetColor(string clr) {
color = clr;
}
string GetColor() {
return color;
}
private:
string color;
};, and sample usage:
void MainWindow::GenerateCats() {
Cat *tofi = new Cat();
tofi->SetColor("orange");
printf("tofi color1 :%s\n",tofi->GetColor().c_str());
Cat smuki;
printf("smuki color 1:%s\n",smuki.GetColor().c_str());
smuki.SetColor("black");
printf("smuki color 2:%s\n",smuki.GetColor().c_str());
Cat *sivkolin = &smuki;
printf("sivkolin color 1:%s\n", sivkolin->GetColor().c_str());
smuki.SetColor("gray");
printf("sivkolin color 2:%s\n", sivkolin->GetColor().c_str());
ProcessCats1("tofi",*tofi,"white");
printf("tofi color 2 :%s\n", tofi->GetColor().c_str());
ProcessCats1("smuki",smuki,"white");
printf("smuki color 3:%s\n", smuki.GetColor().c_str());
ProcessCats2("smuki",&smuki,"no color");
printf("smuki color 4:%s\n", smuki.GetColor().c_str());
printf("sivkolin color 3:%s\n", sivkolin->GetColor().c_str());
ProcessCats2("sivkolin",sivkolin,"gold");
printf("sivkolin color 4:%s\n", sivkolin->GetColor().c_str());
printf("smuki color 5:%s\n", smuki.GetColor().c_str());
delete tofi;
//delete smuki;
//smuki = NULL;
delete sivkolin;
}
void MainWindow::ProcessCats1(string name,Cat CatSample,string clr) {
printf("ProcessCat1 Cat %s color:%s\n",name.c_str(),CatSample.GetColor().c_str());
CatSample.SetColor(clr);
}
void MainWindow::ProcessCats2(string name,Cat *CatSample,string clr) {
printf("ProcessCats2 Cat %s color:%s\n",name.c_str(), CatSample->GetColor().c_str());
CatSample->SetColor(clr);
} the output looks like:
tofi color1 :orange
smuki color 1:
smuki color 2:black
sivkolin color 1:black
sivkolin color 2:gray
ProcessCat1 Cat tofi color:orange
tofi color 2 :orange
ProcessCat1 Cat smuki color:gray
smuki color 3:gray
ProcessCats2 Cat smuki color:gray
smuki color 4:no color
sivkolin color 3:no color
ProcessCats2 Cat sivkolin color:no color
sivkolin color 4:gold
smuki color 5:gold My questions:
Is "->" notation when accessing members addressed with a pointer a C++ or Qt specific?
Function ProcessCats1 expects an object of type Cat not a pointer, why must I use
ProcessCats1("tofi",*tofi,"white"); instead of
ProcessCats1("tofi",&tofi,"white");
Same analogy with function ProcessCats2 which requires a pointer to object Cat and I do
ProcessCats2("smuki",&smuki,"no color");, but smuki is an object, why do I need the "&" meaning "the value at address".
I can delete object created on the heap like this
delete tofi;, but how do I delete smuki in the scope of same function if I need (I know it gets destroyed when out of scope).
When I do
delete sivkolin I delete just the pointer to value of smuki, so I can still access object smuki right?
Much thanks if advance for your help.
class Cat {
public:
void SetColor(string clr) {
color = clr;
}
string GetColor() {
return color;
}
private:
string color;
};, and sample usage:
void MainWindow::GenerateCats() {
Cat *tofi = new Cat();
tofi->SetColor("orange");
printf("tofi color1 :%s\n",tofi->GetColor().c_str());
Cat smuki;
printf("smuki color 1:%s\n",smuki.GetColor().c_str());
smuki.SetColor("black");
printf("smuki color 2:%s\n",smuki.GetColor().c_str());
Cat *sivkolin = &smuki;
printf("sivkolin color 1:%s\n", sivkolin->GetColor().c_str());
smuki.SetColor("gray");
printf("sivkolin color 2:%s\n", sivkolin->GetColor().c_str());
ProcessCats1("tofi",*tofi,"white");
printf("tofi color 2 :%s\n", tofi->GetColor().c_str());
ProcessCats1("smuki",smuki,"white");
printf("smuki color 3:%s\n", smuki.GetColor().c_str());
ProcessCats2("smuki",&smuki,"no color");
printf("smuki color 4:%s\n", smuki.GetColor().c_str());
printf("sivkolin color 3:%s\n", sivkolin->GetColor().c_str());
ProcessCats2("sivkolin",sivkolin,"gold");
printf("sivkolin color 4:%s\n", sivkolin->GetColor().c_str());
printf("smuki color 5:%s\n", smuki.GetColor().c_str());
delete tofi;
//delete smuki;
//smuki = NULL;
delete sivkolin;
}
void MainWindow::ProcessCats1(string name,Cat CatSample,string clr) {
printf("ProcessCat1 Cat %s color:%s\n",name.c_str(),CatSample.GetColor().c_str());
CatSample.SetColor(clr);
}
void MainWindow::ProcessCats2(string name,Cat *CatSample,string clr) {
printf("ProcessCats2 Cat %s color:%s\n",name.c_str(), CatSample->GetColor().c_str());
CatSample->SetColor(clr);
} the output looks like:
tofi color1 :orange
smuki color 1:
smuki color 2:black
sivkolin color 1:black
sivkolin color 2:gray
ProcessCat1 Cat tofi color:orange
tofi color 2 :orange
ProcessCat1 Cat smuki color:gray
smuki color 3:gray
ProcessCats2 Cat smuki color:gray
smuki color 4:no color
sivkolin color 3:no color
ProcessCats2 Cat sivkolin color:no color
sivkolin color 4:gold
smuki color 5:gold My questions:
Is "->" notation when accessing members addressed with a pointer a C++ or Qt specific?
Function ProcessCats1 expects an object of type Cat not a pointer, why must I use
ProcessCats1("tofi",*tofi,"white"); instead of
ProcessCats1("tofi",&tofi,"white");
Same analogy with function ProcessCats2 which requires a pointer to object Cat and I do
ProcessCats2("smuki",&smuki,"no color");, but smuki is an object, why do I need the "&" meaning "the value at address".
I can delete object created on the heap like this
delete tofi;, but how do I delete smuki in the scope of same function if I need (I know it gets destroyed when out of scope).
When I do
delete sivkolin I delete just the pointer to value of smuki, so I can still access object smuki right?
Much thanks if advance for your help.