簡體   English   中英

構造函數內部的setters函數c ++

[英]setters function inside constructor c++

我正在嘗試在構造函數內部使用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";

}

您要傳遞兩個const char*作為參數,因此您應該更改以下內容:

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

對此:

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

您在這里有很多錯誤。

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

您不能使用構造函數兩次。 您在第一行中為兩個對象都使用了構造函數Laptop() ,然后嘗試對laptopObj2使用第二個構造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();

您確實應該使用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";
}

麥克風

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM