C++_课堂笔记_构造与析构

#include

#include

using namespace std;

struct Date

{

int y, m, d;

void setDate(int, int, int);

Date(int yy, int mm, int dd) {y = yy, m = mm, d = dd;}

};

class Student

{

private:

char* name;

Date birthday;

public:

// 如果没写不带参数的构造函数,系统会提供一个不带参数的构造函数,称为缺省构造函数,或者是拷贝构造函数

Student(const Student&); // 拷贝构造函数,当有new和delete的时候要写

Student():birthday(2000, 3, 4) {} // 不带参数的构造函数

Student(char*, int, int, int);

~Student() {delete []name;} // 与构造函数成对出现

};

Student::Student & operator = (const Student &s1) // 运算符重载函数

{

name = new char[strlen(s1.name) + 1];

strnpy(name, s1.name, strlen(s1.name));

birthday = s1.birthday;

return *this;

}

Student::Student(const Student &s1) // 拷贝构造函数

:birthday(s1.birthday) // 初始化

{

// name = s1.name; // 错误

name = new char[strlen(s1.name) + 1];

// name = s1.name; 错误,没用到新开辟的空间

strncpy(name, s1.name, strlen(s1.name));

}
:
birthday(y, m, d) // 初始化

复制代码
{   

// name = p; 不好,指针会改变   

// name = new char\[sizeof§\]; // 指针的大小,一般为8个字节,但不是字符串的长度   

name = new char\[strlen§ + 1\]; // 多一个位置存放'\\0'   

strncpy(name, p, strlen§);   

};

void print(Student s)

{

cout << s,name << endl; // error,私有的,不能访问

}

int main()

{

const char p = "zhangsan";
Student s1((char
)p, 2000, 3, 4); // 强制类型转换

// Student *s;

// s = new Student[10000]; // 调用不带参数的构造函数10000次

Student s2(s1); // 调用拷贝构造函数

// print(s1); // 也会调用拷贝构造函数

Student s3;

s3 = s1; // 运算符重载

复制代码
return 0;

}

相关推荐
信奥卷王24 分钟前
[GESP202503 五级] 原根判断
java·数据结构·算法
小咕聊编程32 分钟前
【含文档+源码】基于SpringBoot的过滤协同算法之网上服装商城设计与实现
java·spring boot·后端
Zz_waiting.32 分钟前
Spring 原理
java·spring·spring自动管理
Predestination王瀞潞4 小时前
IO操作(Num22)
开发语言·c++
瓯雅爱分享5 小时前
Java+Vue构建的采购招投标一体化管理系统,集成招标计划、投标审核、在线竞价、中标公示及合同跟踪功能,附完整源码,助力企业实现采购全流程自动化与规范化
java·mysql·vue·软件工程·源代码管理
宋恩淇要努力5 小时前
C++继承
开发语言·c++
汇能感知6 小时前
光谱相机的探测器阵列
经验分享·笔记·科技
CHHC18807 小时前
vSIM / SoftSIM笔记
笔记
mit6.8247 小时前
[C# starter-kit] 命令/查询职责分离CQRS | MediatR |
java·数据库·c#
江公望7 小时前
Qt qmlRegisterSingletonType()函数浅谈
c++·qt