我想使用指针方法交换两只猫的名字(即cName []中的字符串)。 但是我想只交换名称,而不交换对象。 我说得对吗?
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string.h>
using namespace std;
class CAT
{
public:
CAT(char * firstname) { strncpy(cName, firstname, 79); }
~CAT() { ; }
char * getName() { return cName; }
void setName(char *nameinput) { strncpy(cName, nameinput, 79); }
private:
char cName[80];
};
void nameSwap(CAT *CatA, CAT *CatB)
{
char testing[] = "testing";
CAT temp =CAT(testing);
temp = *CatA;
*CatA = *CatB;
*CatB = temp;
}
int main()
{
char Taby[] = "Taby";
char Felix[] = "Felix";
CAT pA = CAT(Taby);
CAT pB = CAT(Felix);
cout << "The inital name pA is " << pA.getName() << " and pA is" << pB.getName() << endl;
nameSwap(&pA, &pB);
cout << "After approach" << endl;
cout << "The name pA is " << pA.getName() << " and " << pB.getName() << endl;
system("PAUSE");
return 0;
}
答案 0 :(得分:1)
实际上,您正在交换整个对象,而不仅仅是CAT的名称。
如果只想交换名称,则需要像处理对象一样访问Appium
成员。您还需要访问此类交换功能中的iOS
成员的权限,因为cName
是私有的,所以外部函数不会具有此功能。使交换函数成为您的类的成员:
cName
并这样称呼
cName
但是请考虑使用class CAT
{
public:
CAT(const char* firstname) { strncpy(cName, firstname, 80); }
~CAT() {}
const char* getName() const { return cName; }
void setName(const char *nameinput) { strncpy(cName, nameinput, 80); }
void swapName(CAT& CatB)
{
char tmp[80];
strncpy(tmp, CatB.cName, 80);
strncpy(CatB.cName, cName, 80);
strncpy(cName, tmp, 80);
}
private:
char cName[80];
// other CAT attributes won't be affected by the name swap
};
代替pA.swapName(pB); // or pB.swapName(pA); - same result
。您很快就会发现C ++字符串更易于使用,并且在交换它们时,仅交换了指向底层内存的指针,因此更有效。
std::string
编辑:根据请求,我使用指针添加了一个版本。
我匆忙制作了它,并且没有对其进行调试,所以我可能犯了很多错误。首先,我创建了一个名为char[]
的新类,它将包含名称和其他适合字符串的属性。
std::string one;
std::string two;
one.swap(two);
安装好后,您的CAT可以变成这样:
wong_string
因此,您已经有了。指针丰盛...