基于指针的程序的输出
Output of a pointer based program
我在面试中被问到这个问题。我是C++的新手,这个程序编译成功。有人能告诉我这个程序到底是干什么的吗?
#include <iostream>
using namespace std;
class Student {
private:
char *name;
};
int main() {
Student *s = new Student();
Student s1 = *s;
Student s2;
s2 = s1;
delete s;
return 0;
}
对于没有用户定义的赋值运算符(复制构造函数)的类,编译器会生成默认的赋值运算符,通过简单的赋值来分配(复制)所有成员。因此,在学生的情况下,默认的operator=
看起来像这样:
Student& operator=(const Strudent& rhs)
{
this->name = rhs.name;
}
复制构造函数时:
Student(const Student& origin)
: name(origin.name)
{
}
这意味着,就在这条线之前:
delete s;
CCD_1、s
、s1
和s2
使它们的name
指向完全相同的存储器位置。如果s
在那里包含任何分配的数据,那么在s1
或delete
之后使用它将导致灾难。
#include <iostream>
告诉编译器程序将使用库iostream 中定义的一些函数
using namespace std;
告诉编译器使用std命名空间。基本上,我们不再需要用这个命令在std命名空间中定义的函数之前写"std."。
class Student {
private:
char *name;
};
定义名为"Student"的新类,该类包含一个名为"name"的变量。"name"是私有的,因此只能由类的成员访问。"name"是指向字符的指针,因此可以用来指向字符数组。
int main()
{
开始定义主程序,我们程序的入口点
Student *s = new Student();
定义指向名为s的学生对象的指针。"new Student()"为Student对象分配内存。s存储所分配的存储器的地址。注意:s指向的Student类中的变量"name"未初始化。
Student s1 = *s;
定义一个新的学生对象s1,并通过复制s指向的学生对象对其进行初始化。s1中的变量"name"复制了s指向的Student类中变量"name’的值(未初始化!)。
Student s2;
定义一个新的Student对象s2。s2在默认情况下被初始化。
s2 = s1;
通过复制s1 初始化s2
delete s;
删除s 指向的内存空间中分配的学生对象
return 0;
通过向调用进程返回0来结束程序
相关文章:
- 如何从Windows应用程序输出到标准?
- 在由Sublime文本3编译后在cmd上显示Java程序输出
- 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- 而循环:简单的除法程序输出零,不明白为什么
- Qt creator 4.11,在应用程序输出面板中创建一个链接
- 使用复制构造函数的程序输出错误
- 为什么Qt Creator的应用程序输出不能从spdlog记录器打印
- 为什么在 Direct X 11 中没有我的程序输出?
- 我怎样才能阻止我的程序输出时间,它使我的程序难以阅读
- 程序输出奇怪的字符
- 程序输出"nan"
- 为什么我的C++程序输出不同的数字来将米转换为英尺?
- 3D 纹理大小会影响程序输出,而不会引发错误
- C++,程序输出无效输入,但继续通过循环
- 如何连接C++和Excel(从C++程序输出到Excel电子表格)
- 为什么我的C 程序输出乱码代码
- QT小部件应用程序输出到控制台
- 混淆了具有虚拟继承的程序输出
- 为什么我的C++程序输出这个
- 为什么我的程序输出不断变化?EAX寄存器不断更改值