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;

}

相关推荐
P***84391 分钟前
SpringBoot详解
java·spring boot·后端
眠晚晚2 分钟前
API攻防&系统攻防笔记分享
笔记·web安全·网络安全
guslegend8 分钟前
第2章:Linux服务器-Docker安装
java
5***262210 分钟前
【SpringBoot】SpringBoot中分页插件(PageHelper)的使用
java·spring boot·后端
DanB2421 分钟前
Java(多线程)
java·开发语言·python
O***p60425 分钟前
Java在分布式中的Archaius
java·开发语言·分布式
在繁华处28 分钟前
JAVA实战:文件管理系统1.0
java·开发语言·前端
算法与编程之美29 分钟前
Java数组动态扩容
java·开发语言·python·算法
曹牧1 小时前
Java: Json的键值双引号
java·chrome·json
有一个好名字1 小时前
Spring AI ——Java开发者的AI集成神器
java·人工智能·spring