C++构造函数实例——拷贝构造,赋值
#define _CRT_SECURE_NO_WARNINGS //windows系统
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std; class student
{
private:
char *name;
int age;
public:
student(const char *n = "no name", int a = )
{
name = new char[]; // 比malloc好!
strcpy(name, n);
age = a;
cout << "构造函数,申请了100个char元素的动态空间" << endl;
}
student & operator=(const student &s)
{
strcpy(name, s.name);
age = s.age;
cout << "赋值函数,保证name指向的是自己单独的内存块" << endl;
return *this; //返回 “自引用”
}
student(const student &s)
{ // 拷贝构造函数 Copy constructor
name = new char[];
strcpy(name, s.name);
age = s.age;
cout << "拷贝构造函数,保证name指向的是自己单独的内存块" << endl;
}
void display(void)
{
cout << name << ", age " << age << endl;
}
virtual ~student()
{ // 析构函数
cout << "析构函数,释放了100个char元素的动态空间" << endl;
delete[] name; // 不能用free!
}
};
int main()
{
//student s; //编译错误,类中实现了构造函数,因此,需要有参数
student k("John", );
student mm(k); //拷贝构造函数 student m("lill", );
m.display(); m = k; //赋值函数
k.display();
mm.display(); return ;
}
运行结果:
构造函数,申请了100个char元素的动态空间
拷贝构造函数,保证name指向的是自己单独的内存块
构造函数,申请了100个char元素的动态空间
lill, age 666
赋值函数,保证name指向的是自己单独的内存块
John, age 56
John, age 56
析构函数,释放了100个char元素的动态空间
析构函数,释放了100个char元素的动态空间
析构函数,释放了100个char元素的动态空间
const char *n = "no name",必须添加const
C++构造函数实例——拷贝构造,赋值的更多相关文章
- C++ Primer笔记9_构造函数_拷贝构造(深拷贝与浅拷贝)
1.构造函数: >构造函数是一个特殊的.与类同名的成员函数,用于给每一个成员设置适当的初始值. >构造函数不能有返回值,函数名与类名同样. >缺省构造函数时,系统将自己主动调用该缺省 ...
- 构造函数,拷贝构造和赋值运算符调用时机,explicit,
#include<iostream> #include <stdio.h> using namespace std; class test{ int mvalue; publi ...
- C++拷贝构造&操作符重载
头文件 DString.h如下 #ifndef __DSTRING_H #define __DSTRING_H #endif #include <stddef.h> class DStri ...
- 构造函数和初始化表、this指针与常函数、析构函数、拷贝构造与拷贝赋值(day05)
十四 构造函数和初始化表 ... 初始化表 )语法形式 class 类名{ 类名(形参表):成员变量1(初值),...{} }; )必须要使用初始化表的场景 -->如果有类 类型的成员变量,而该 ...
- C++ 构造函数、析构函数、拷贝构造、赋值运算符
之所以要把它们放在一起,是因为在使用C/C++类语言的时候,很容易混淆这几个概念(对Java来说完全没有这样的问题,表示Javaor完全没有压力). 先建立一个测试类(包含.h和.cpp) //~ P ...
- 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结
转自 http://www.jb51.net/article/37527.htm,感谢作者 #include "stdafx.h" #include <iostre ...
- c++ 构造函数,拷贝构造函数,析构函数与赋值操作符
题目: 为下面的Rectangle类实现构造函数,拷贝构造函数,赋值操作符,析构函数. class Shape { int no; }; class Point { int x; int y; }; ...
- C++中的构造函数,拷贝构造函数和赋值运算
关于C++中的构造函数,拷贝构造函数和赋值运算,以前看过一篇<高质量C++/C编程指南>的文章中介绍的很清楚,网上能搜索到,如果想详细了解这方面的知识可以参看一下这篇文章. 常见的给对象赋 ...
- 编写类String的构造函数、拷贝构造函数、析构函数和赋值函数
一.题目: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &othe ...
随机推荐
- ElasticSearch服务器操作命令
在win7环境,进入elasticsearch安装目录的bin目录: 1. elasticsearch.bat 就可以启动elasticsearch了.运行这个插件的好处是:elasticsearch ...
- Java 类型转换String,List,Map,Array
1. JsonString转为Map String jsoNStr = "{\n" + "\t\"TestArray\": [\"1\&qu ...
- 谷歌插件 JSON-Handle
JSON-Handle http://jsonhandle.sinaapp.com/ 点击下载 插件下载后,在浏览器输入:chrome://extensions/ 将下载后的文件拖入 chrome浏览 ...
- 【C++】【MFC】创建新的线程函数
DWORD WINAPI MyThreadProc (LPVOID lpParam){ somestruct* pN = (somestruct*)lpParam; // 将参数转为你的类型 ... ...
- Python http
# import httplib # http_client = None # http_client = httplib.HTTPConnection('localhost', 8080, time ...
- 【洛谷3759】[TJOI2017] 不勤劳的图书管理员(树套树)
点此看题面 大致题意: 给定一个序列,每个元素有两个属性\(a_i\)和\(v_i\),每次操作改变两个元素的位置,求每次操作后\(\sum{v_i+v_j}[i<j,a_i>a_j]\) ...
- Java自带工具包StringUtils包含方法
//导入包 import org.apache.commons.lang3.StringUtils //判断不为空 不包含空格 StringUtils.isNotEmpty(" " ...
- UVA1629 Cake slicing
题目传送门 直接暴力定义f[x1][y1][x2][y2]是使对角为\((x1, y1),(x2, y2)\)这个子矩形满足要求的最短切割线长度 因为转移顺序不好递推,采用记忆化搜索 #include ...
- 分享12款最佳的Bootstrap设计工具
设计师总会渴望有一些新奇有趣的设计工具来提高工作效率,而Bootstrap就是您的不二选择.2013年Bootstrap得到了广泛普及, 它是开发者较为常用的框架之一,本文我们将分享12款最佳的Boo ...
- Oracle分页抽数存储过程
--outTotal是需要返回的总数,v_loginUserId是传入的登录人ID,抽取他的客户,v_CurrPage是传入的第几页,v_pageSize传入的每页数据条数. ) FROM tb_cu ...