#include<iostream> using namespace std; class My { private: int a; static int b; public: My(int i) { a=i; b=b+a; } static void fun(My M) { cout<<"a="<<M.a<<endl; cout<<"b="<<b<<endl; } }; int My::b=0; int main() { My A(150),B(300); My::fun(A); B.fun(B); } 这段代码的功能
时间: 2024-04-02 08:31:07 浏览: 33
这段代码的功能是定义了一个名为My的类,其中包含了一个私有的整型变量a、一个静态的整型变量b和一个公有的构造函数My(int i)。在构造函数中,将参数i的值赋值给a,并将a的值加上静态变量b的值赋给b。此外,类中还定义了一个静态的成员函数fun,参数为My类型的对象M,函数中输出参数M的私有变量a的值和静态变量b的值。
在主函数中,创建了两个My类型的对象A和B,并分别传入参数150和300。然后分别通过类名和对象名来调用静态函数fun,其中类名调用时传入了对象A,对象名调用时传入了对象B。调用函数fun时,会输出对应对象的私有变量a的值和静态变量b的值。
相关问题
优化这段代码#include <iostream> #include <fstream> #include <vector> using namespace std; class student { private: string name; const char* uni = "云南大学";//const常量 string department; string major; int age; long number; public: //static成员 static char* ident; //不带参数的构造函数 student() { number = 20201120425; name = "王文言"; department = "软件学院"; age = 21; major = "软件工程专业"; }
这段代码已经很简洁,但仍有一些可以优化的地方:
1. 类成员变量的初始化
可以使用成员初始化列表来初始化类成员变量,以提高效率。这样,成员变量的初始化将在对象构造时一次性完成,而不是先默认初始化,再赋值。
2. const常量的赋值方式
可以将const常量的值在定义时直接赋值,而无需在构造函数中进行赋值。
综上所述,优化后的代码如下:
```C++
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
class student {
private:
string name;
const char* uni = "云南大学";
string department;
string major;
int age;
long number;
public:
//static成员
static char* ident;
//不带参数的构造函数
student() : name("王文言"), department("软件学院"), major("软件工程专业"), age(21), number(20201120425) {}
};
```
在上面的代码中,我们使用了成员初始化列表来初始化成员变量,将const常量的值在定义时直接赋值,而无需在构造函数中进行赋值。
优化这段代码 #include <iostream> #include <fstream> #include <vector> using namespace std; class student { private: string name; const char* uni = "云南大学";//const常量 string department; string major; int age; long long number; public: //static成员 static char* ident; //不带参数的构造函数 student() { number = '20201120425'; name = "王文言"; department = "软件学院"; age = 21; major = "软件工程专业"; }
在这段代码中,我们可以进行以下优化:
1. 类成员变量的初始化
类成员变量可以在构造函数中进行初始化,而不需要在类定义中进行初始化。因此,我们可以将成员变量的初始化从类定义中移除,改为在构造函数中进行初始化。
2. 使用初始化列表
在构造函数中,我们可以使用初始化列表来初始化成员变量,这样可以提高代码的执行效率。因为在初始化列表中,成员变量是直接初始化的,而在构造函数体中,成员变量是先进行默认初始化,然后再进行赋值操作的。
3. 数字类型的赋值方式
在代码中,我们将学号赋值为'20201120425',这是一个字符类型的值。但是,学号应该是一个数字类型的值。因此,我们应该将学号赋值为数字类型的值,而不是字符类型的值。另外,学号的长度超过了long long类型的最大值,因此需要使用更大的数据类型来存储学号。
综上所述,优化后的代码如下:
```C++
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
class student {
private:
string name;
const char* uni;
string department;
string major;
int age;
long long number;
public:
//static成员
static char* ident;
//不带参数的构造函数
student() : uni("云南大学"), number(20201120425), name("王文言"), department("软件学院"), age(21), major("软件工程专业") {}
};
```
在上面的代码中,我们将成员变量的初始化移动到了构造函数的初始化列表中,并使用了数字类型的学号值来初始化number成员变量。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)