这种方法仅更改名称的对象吗?

时间:2018-11-15 22:03:00

标签: c++ pointers swap

我想使用指针方法交换两只猫的名字(即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;
}

1 个答案:

答案 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

因此,您已经有了。指针丰盛...