void stu::init(int mynum,char *myname,int myage) { num=mynum; strcpy(name,myname);age=myage;}
时间: 2023-12-03 07:42:46 浏览: 30
这是一个 C++ 类中的成员函数 `stu::init` 的实现代码,它的作用是初始化类的对象的数据成员 `num`、`name` 和 `age`。其中,`mynum`、`myname` 和 `myage` 是传入的参数,分别表示学生的学号、姓名和年龄。
具体来说,`mynum` 会被赋值给 `num`,`myname` 会被复制到 `name` 中,`myage` 会被赋值给 `age`。需要注意的是,`name` 是一个字符数组,因此不能直接使用赋值操作符,而是需要使用 `strcpy` 函数将字符串复制到 `name` 中。
该函数的定义应该在类的声明中,如下所示:
```
class stu {
public:
void init(int mynum, char* myname, int myage);
private:
int num;
char name[20];
int age;
};
```
你可以在类的外部调用该函数,例如:
```
stu s;
s.init(123, "Tom", 18);
```
相关问题
#include <iostream.h> #include <string.h> class CStudent { public: CStudent(char *n, int a); ~CStudent(); static void SetAge(int age); private: char *name; int age; static int nTotalObj; }; int CStudent::nTotalObj = 0; CStudent::CStudent(char *n, int a) :age(a) { int nLen = strlen(n); name = new char[nLen+1]; strcpy(name,n); name[nLen] = '\0'; nTotalObj++; } CStudent::~CStudent() { delete[] name; nTotalObj--; } void CStudent::SetAge(int age) { this->age = age; } void main() { CStudent stu1("张三",25); CStudent str2("李四",26); cout<<"CStudent::nTotalObj="<<CStudent::nTotalObj<<endl; }问题三:如果不改变主函数和类 CStudent 中的成员变量的属性,应该如何改正该程序?
这个程序存在一个问题,就是在类 CStudent 中定义的 name 和 age 成员变量没有进行释放,会导致内存泄漏。解决方法是在类的析构函数中释放这些成员变量。
修改后的代码如下:
```
#include <iostream.h>
#include <string.h>
class CStudent {
public:
CStudent(char *n, int a);
~CStudent();
static void SetAge(int age);
private:
char *name;
int age;
static int nTotalObj;
};
int CStudent::nTotalObj = 0;
CStudent::CStudent(char *n, int a) : age(a) {
int nLen = strlen(n);
name = new char[nLen + 1];
strcpy(name, n);
name[nLen] = '\0';
nTotalObj++;
}
CStudent::~CStudent() {
delete[] name;
nTotalObj--;
}
void CStudent::SetAge(int age) {
this->age = age;
}
void main() {
CStudent stu1("张三", 25);
CStudent str2("李四", 26);
cout << "CStudent::nTotalObj=" << CStudent::nTotalObj << endl;
}
```
这样就能保证在对象被销毁时,其成员变量占用的内存也会被释放,避免了内存泄漏的问题。
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<string.h> using namespace std; class student { private: long num; char* name; string major; char Class[4]; public: student(const char* nam); void show_stu(); }; student::student(const char* nam) { name = new char[strlen(nam) + 1]; strcpy(name, nam); cout << "分别输入学号和姓名: " << endl; cin >> num; cin >> name; cout << "输入专业:" << endl; cin >> major; cout << "输入班级:" << endl; cin >> Class[4]; } void student::show_stu() { cout << "学生信息: " << num << " " << name << endl; cout << " " << major << " " << Class[4] << endl; } class leader:public student { private: string position; public: leader(const char* na) :student(na); }; leader::leader(const char* na) { cout << "输入职位:" << endl; cin >> positon; } int main() { student a("fakeeeeee"); a.show_stu(); leader b("fakeeeeee"); return 0; }帮我找出上面c++代码的bug
这段代码有一些错误:
1. 在 `student` 类中,`cin >> name` 会将已经通过 `new` 分配的内存丢失,应该改为 `cin >> name + 1`。
2. 在 `student` 类中,`cin >> Class[4]` 会导致越界访问,应该改为 `cin >> Class`。
3. 在 `leader` 类中,构造函数的声明应该为 `leader(const char* na) :student(na) {}`,而不是 `leader(const char* na) :student(na);`。
4. 在 `leader` 类中,`cin >> positon` 应该改为 `cin >> position`。
修改后的代码如下:
```
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
class student {
private:
long num;
char* name;
string major;
char Class[4];
public:
student(const char* nam);
void show_stu();
};
student::student(const char* nam) {
name = new char[strlen(nam) + 1];
strcpy(name, nam);
cout << "分别输入学号和姓名: " << endl;
cin >> num;
cin >> name + 1;
cout << "输入专业:" << endl;
cin >> major;
cout << "输入班级:" << endl;
cin >> Class;
}
void student::show_stu() {
cout << "学生信息: " << num << " " << name << endl;
cout << " " << major << " " << Class << endl;
}
class leader : public student {
private:
string position;
public:
leader(const char* na) : student(na) {};
};
int main() {
student a("fakeeeeee");
a.show_stu();
leader b("fakeeeeee");
return 0;
}
```