setters函数在构造函数c++中

setters function inside constructor c++

本文关键字:c++ 构造函数 函数 setters      更新时间:2023-10-16

我试图在构造函数中使用setter函数,这是我以前从未做过的。它给了我以下错误:

[Error] no match for call to '(Laptop) (const char [5], const char [3], int, int)'那么我也需要编写setter函数吗?我是说建造师之外?我的意思是这样

void Laptop::setBrand(char a[])
{   
brand=a;}

我认为错误在第二个构造函数中,它需要四个参数,但我找不到

这是代码:

#include <iostream>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
using namespace std;
class Laptop{
private:
char brand[10];
char processor[10];
int ram;
int hardDrive;
public:
void setBrand(char Bra[]);
void setProcessor(char Pro[]);
void setRam(int Ram);
void setHardDrive(int HDrive);

char *getBrand();
char *getProcessor();
int  getRam();
int getHardDrive();


Laptop();
Laptop(char [],char [],int ,int );                    
};
Laptop::Laptop(){
cout<<"Default constructor called...n";
strcpy(brand,"None");
strcpy(processor,"None);
ram=0;
hardDrive=0;
}

我认为错误在构造函数中

Laptop::Laptop(char Bra[],char Pro[],int Ram,int HDrive) 
{
cout<<"Parameterized constructor called...n"; 
setBrand(Bra );
setProcessor(Pro );
setRam(Ram);
setHardDrive(HDrive);        
}
char *Laptop::getBrand()
{
return brand;
}
char *Laptop::getProcessor()
{
return processor;
}
int Laptop::getRam()
{
return ram;
}
int Laptop::getHardDrive()
{
return hardDrive;
}
int main()
{
Laptop laptopObj1;
Laptop laptopobj1("Dell","i5",4,500);
cout<<"Brand :"<<laptopObj1.getBrand()<<"n";
cout<<"Processor :"<<laptopObj1.getProcessor()<<"n";

cout<<"Ram :"<<laptopObj1.getRam()<<"n";

cout<<"HardDrive :"<<laptopObj1.getHardDrive()<<"n";
cout<<"Brand :"<<laptopObj2.getBrand()<<"n";
cout<<"Processor :"<<laptopObj2.getProcessor()<<"n";
cout<<"Ram :"<<laptopObj2.getRam()<<"n";
cout<<"HardDrive :"<<laptopObj2.getHardDrive()<<"n";
}

这里有很多错误。。

Laptop laptopObj1,laptopObj2;
...
laptopObj2("Dell","i5", 4, 500);

构造函数不能使用两次。您在第一行中为两个对象都使用了构造函数Laptop(),然后尝试为laptopObj2使用第二个构造函数。您可以将第二行更改为:

laptopObj2 = Laptop("Dell","i5", 4, 500);

或者更好的定义是:

Laptop laptopObj1;
....
Laptop laptopObj2("Dell","i5", 4, 500);

另一个问题是在Laptop()构造函数定义中:

Laptop::Laptop(char Bra[],char Pro[],int Ram,int HDrive)
{
.....
setBrand(Bra []); // Remove the []
setProcessor(Pro []); // Remove the []
....
}

还有一个问题:类中的一些函数没有定义:

void setBrand(char Bra[]);
void setProcessor(char Pro[]);
void setRam(int Ram);
void setHardDrive(int HDrive);
void display();

编辑:

c++的对象之一是std::string(#include <string>(。您可以使用它来代替char str[]——这是在c++中声明字符串的一种更简单的方法。例如,在您的案例中:

/* Replace this: */
char brand[10];
char processor[10];
void setBrand(char Bra[]);
void setProcessor(char Pro[]);
char *getBrand();
char *getProcessor();
/* With this: */
string brand;
string processor;
void setBrand(const string &Bra);
void setProcessor(const string &Pro);
string getBrand();
string getProcessor();

您正在传递两个const char*作为参数,所以您应该更改它:

Laptop::Laptop(char Bra[],char Pro[],int Ram,int HDrive)

到此:

Laptop::Laptop(const char* ,const char* ,int Ram,int HDrive)

您确实应该使用std::string而不是char[]。

关于构造函数的问题,没有必要调用setter,如下代码所示。C++有一个实现该功能的快捷方式。我使用了std::string并修复了所有的拼写错误。

#include <iostream>
#include <string>
using namespace std;
class Laptop
{
private:
string brand;
string processor;
int ram;
int hardDrive;
public:
void setBrand(string Bra);
void setProcessor(string Pro);
void setRam(int Ram);
void setHardDrive(int HDrive);
string getBrand();
string getProcessor();
int getRam();
int getHardDrive();
Laptop();
Laptop(string, string, int, int);
};
Laptop::Laptop()
: brand("None")
, processor("None")
, ram(0)
, hardDrive(0)
{
cout << "Default constructor called...n";
}
Laptop::Laptop(string Bra, string Pro, int Ram, int HDrive)
: brand(Bra)
, processor(Pro)
, ram(Ram)
, hardDrive(HDrive)
{
cout << "Parameterized constructor called...n";
}
string Laptop::getBrand()
{
return brand;
}
string Laptop::getProcessor()
{
return processor;
}
int Laptop::getRam()
{
return ram;
}
int Laptop::getHardDrive()
{
return hardDrive;
}
int main()
{
Laptop laptopObj1;
Laptop laptopObj2("Dell", "i5", 4, 500);
cout << "Brand :" << laptopObj1.getBrand() << "n";
cout << "Processor :" << laptopObj1.getProcessor() << "n";
cout << "Ram :" << laptopObj1.getRam() << "n";
cout << "HardDrive :" << laptopObj1.getHardDrive() << "n";
cout << "Brand :" << laptopObj2.getBrand() << "n";
cout << "Processor :" << laptopObj2.getProcessor() << "n";
cout << "Ram :" << laptopObj2.getRam() << "n";
cout << "HardDrive :" << laptopObj2.getHardDrive() << "n";
}

Mike