【发布时间】:2021-07-18 16:31:10
【问题描述】:
我知道构造函数中的深拷贝可以通过以下方式完成。
class student{
public:
int age;
int rollno;
char *name;
student(int rollno,int age, char *name){
this->age=age;
this->rollno=rollno;
//deep copy
this->name=new char[strlen(name)+1];
strcpy(this->name,name);
}
};
但我想使用初始化列表来做(如果变量是 const 类型)这是我的新类:
class student{
public:
const int age;
int rollno;
const char *name; // used pointer to avoid wastage of space or less space getting assigned
student(int age,int rollno, char *name): rollno(rollno),age(age),name(name){
}
};
现在我正在通过以下方式访问这个类
#include<bits/stdc++.h>
#include "student.cpp"
using namespace std;
int main(){
char name[]= "jerry";
student s(12,1,name);
cout<<s.name<<endl; //gives jerry
name[0]='m';
cout<<s.name<<endl; // gives merry
}
所以我想要的是对象变量的值不应该改变。这意味着它应该在两个 cout 语句中打印 jerry 。有类似的问题,但我没有得到那个或如何在这种特殊情况下实施。
【问题讨论】:
-
作为一个快速提示,
const成员变量非常令人头疼,因为它的好处有限。将成员设为私有会为您省去很多麻烦。
标签: c++ constructor initializer-list