之前编译C++程序遇到的问题,我为了方便都是直接把char * 改为 string
#include<iostream>
using namespace std;
class Student{
public:
Student(){
this->m_total+=1;
}//缺省默认构造函数
Student(int age,char *name,float score):m_age(),
m_name(name),m_score(score){//构造函数初始化列表建议按照声明顺序,实际也是。
this->m_total+=1;
}
~Student(){
cout<<"delete!"<<endl;
}
public:
static int m_total;//记录学生的总数目 ,静态成员必须在类的外部初始化。
public://成员函数
int get_age();
char * get_name();
float get_score();
int get_total();
void set_age(int age);
void set_name(char *name);
void set_score(int score);
private:
int m_age;
char *m_name;
float m_score;
};
int Student::m_total = 0; //一定要加类型int
void Student::set_age(int age){
this->m_age = age;
}
void Student::set_name(char *name){
this->m_name = name;
}
void Student::set_score(int score){
this->m_score = score;
}
int Student::get_age(){
return this->m_age;
}
char * Student::get_name(){
return this->m_name;
}
float Student::get_score(){
return this->m_score;
}
int Student::get_total(){
return this->m_total;
}
int main(){
Student std1 = Student(18,"Amy",78.2f);
Student std2 = Student(19,"jimmy",90.2f);
cout<<std2.get_total();
return 0;
}
直到我googl了一下该问题,理论上,我们传给函数的字面常量是没法被修改的。:
-
如果是类的成员变量,我觉得我们应该使用
string
const std::string 和 CString 比较难以共处
CString 实现了const std::string 和const std::wstring
二者之一的功能,如果是MBCS 他就是 和 const std::string 大致相当的字符串
如果是 UNICODE 他就是 和const std::wstring 大致相当的字符串
二者任意一个实现了,都不必实现 const char * 字符串 的处理函数了 -
不是类的成员变量,只需要修改char * 为可修改的数组 或者不可修改的指针变量即可。
-
还有一种方法是使用强制转换,如
m = (char *)("Amy")