c++中類初始化賦值過程中字符串作為參數的問題


先看一段類代碼的定義:

  • 類的頭文件
#pragma once
#include<iostream>
using namespace std;
class mycoach
{
public:
    char name[30];
    int age;
    char expertise[60];
    char foods[60];
    mycoach(char *name,int age,const char* expertise);
    //mycoach(const mycoach& coach);
    ~mycoach();
    void print();
    void setfoodslike(char * foods);
    void eat();
};
  • 類的實現文件
#define _CRT_SECURE_NO_WARNINGS
#include "mycoach.h"

#include <string.h>
using namespace std;


mycoach::mycoach(char *_name,int age,const char * expertise):age(age)
{
    strcpy(name,_name);
    cout << "I'm " <<name<< endl;
    cout << "芳齡:" << age << endl;
    cout << "我擅長:"<<expertise <<endl;
}


mycoach::~mycoach()
{
    cout << "......回宿舍休息了" << endl;
}
void mycoach::print()
{
    cout << "hello~ I'm " << name << endl;
    cout << "今年芳齡: " << age << endl;
    cout << "擅長武技: " << expertise << endl;
}
void mycoach::setfoodslike(char * foods)
{
    eat();
}
void mycoach::eat()
{
    cout << "我喜歡吃:" << foods << endl;
}
  • 調用
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include "mycoach.h"
using namespace std;
int main()
{
    char coachname[30] = "陳培昌";
    char* name = coachname;
    mycoach cpc(name,23,"泰拳,散打");
    return 0;
}

輸出結果:

  • 面相對象編程的習慣
如果閱讀本篇文章的你,有使用其他面向對象編程語言的經歷,對於直接調用類名 對象名(初始化參數1,初始化參數2,初始化參數3.....)進行實例化的做法一定司空見慣

  • c/c++使用變量存放字符串信息時使用的技術手段
但偏偏作為從C有技術繼承的語言C++來說,實現一個變量盛放字符串,做法十分獨特-----C語言使用字符數組盛放字符串信息,C和C++都用char* 變量名指向一個字符串,C++中單設立了一個容器類型string存放字符串......
  • 問題
如果你習慣上述實例化一個對象的習慣,那么在c++就要留意了,對於初始化時的字符串,一定要選好變量類型,下面就各類變量選型帶來的問題予以列出
  • string類變量
以本篇中的類為例:如果mycoach類的屬性name或者expertise這種字符串被聲明為string類型,當然皆大歡喜,且容易想到,但是類成員方法print()中有大量cout輸出調用,string類型無法cout直接輸出,
結果是你不得不實現cout的多態,例如寫個ostrem&operator<<(string name)函數什么的,太麻煩
  • char* 作為入參name的變量類型,直接定義char* name="xxxx";會報錯,只能通過下列曲折的方法,再把name傳入構造函數,太麻煩
char coachname[30] = "陳培昌";
char* name = coachname;
  • const char* 可以,實際上類似於“xxxxx”的字符串在c++中被稱作“字面量”,在本例中,構造函數中的參數expertise就屬於這種變量類型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM