C++ 无法在FunctionOne或FunctionTwo中调用GetColor或SetColor方法
我在学习C++的同时,从一本书中复制了这个简单的代码来玩它。但是,我不能在C++ 无法在FunctionOne或FunctionTwo中调用GetColor或SetColor方法,c++,class,oop,C++,Class,Oop,我在学习C++的同时,从一本书中复制了这个简单的代码来玩它。但是,我不能在FunctionOne或FunctionTwo中调用GetColor或SetColor方法。我试过写theCat->GetColor,theCat->SetColor(“黄色”)在两个函数中,但它们似乎都不起作用。我想知道是否可以在函数中调用这些方法。如果是,怎么做 #include <iostream> #include <string> using namespace std; class Si
FunctionOne
或FunctionTwo
中调用GetColor
或SetColor
方法。我试过写theCat->GetColor代码>,theCat->SetColor(“黄色”)代码>在两个函数中,但它们似乎都不起作用。我想知道是否可以在函数中调用这些方法。如果是,怎么做
#include <iostream>
#include <string>
using namespace std;
class SimpleCat {
public:
SimpleCat();
SimpleCat(SimpleCat&);
~SimpleCat();
void SetColor(string newColor) { color = newColor; }
string GetColor() { return color; }
private:
string color;
};
SimpleCat::SimpleCat() {
cout << "Simple cat constructor…\n";
color:"";
}
SimpleCat::SimpleCat(SimpleCat&) {
cout << "SimpleCat copy constructor…\n";
}
SimpleCat::~SimpleCat() {
cout << "SimpleCat destructor…\n";
}
SimpleCat FunctionOne(SimpleCat theCat);
SimpleCat* FunctionTwo(SimpleCat* theCat);
int main() {
cout << "Making a cat…\n";
SimpleCat Frisky;
cout << "Calling FunctionOne…\n";
FunctionOne(Frisky);
cout << "Calling FunctionTwo…\n";
Frisky.SetColor("yellow");
FunctionTwo(&Frisky);
cout << Frisky.GetColor();
return 0;
}
// function one passes by value
SimpleCat FunctionOne(SimpleCat theCat) {
cout << "Function One, Returning…\n";
return theCat;
}
SimpleCat* FunctionTwo(SimpleCat* theCat) {
cout << "Function Two, Returning...\n";
return theCat;
}
#包括
#包括
使用名称空间std;
类SimpleCat{
公众:
SimpleCat();
SimpleCat(SimpleCat&);
~SimpleCat();
void SetColor(字符串newColor){color=newColor;}
字符串GetColor(){return color;}
私人:
字符串颜色;
};
SimpleCat::SimpleCat(){
cout在FunctionOne()
内部,通过值传入CAT
。您必须使用
运算符访问其成员:
SimpleCat函数一(SimpleCat theCat){
涂层设置颜色(“红色”);
cout是的,可以在函数内部调用这些方法。例如:
#包括
#包括
使用名称空间std;
类SimpleCat{
公众:
SimpleCat();
SimpleCat(SimpleCat&);
~SimpleCat();
void SetColor(字符串newColor){color=newColor;}
字符串GetColor(){return color;}
私人:
字符串颜色;
};
SimpleCat::SimpleCat(){
该死的,比我快。太好了。谢谢。我还有一个问题。为什么我们不能将FunctionTwo
声明为SimpleCat FunctionTwo(SimpleCat*theCat);
?为什么它应该写成SimpleCat*FunctionTwo(SimpleCat*theCat)
?@egoobidian什么使你认为你不能那样声明它?你可以。但是,返回值然后由值返回,所以如果你要返回的cat
,那么你必须取消对它的引用,例如:返回*theCat;
否则你必须返回一个全新的SimpleCat
对象。@RemyLebeau噢我明白了。编译器给出了一个错误,这让我很困惑。@eGobidian嗯,是的,因为您不能将SimpleCat*
指针分配给SimpleCat
对象。但是您可以取消对指针的引用以访问它所指向的对象,然后您可以将该对象分配给另一个对象。
SimpleCat::SimpleCat(const SimpleCat &src) {
cout << "SimpleCat copy constructor…\n";
color = src.color;
}
SimpleCat::SimpleCat(const SimpleCat &src) : color(src.color) {
cout << "SimpleCat copy constructor…\n";
}