C++构造函数复用问题
来源:互联网 发布:ui设计 笔记本 知乎 编辑:程序博客网 时间:2024/05/29 13:03
在定义C++的构造函数时,如果有N个构造函数,每一个都写一遍代码是很繁琐的。C++中有没有和Java中一样的调用机制,简化构造方法的定义呢?
像这样:
#define _CRT_SECURE_NO_WARNINGS#include"MyString.h"#include<iostream>MyString::MyString(const MyString & constArr){ MyString(constArr.m_charArray); }MyString::MyString(const char* constCharP) :m_charArray(NULL){ if (constCharP) { this->m_charArray = new char[strlen(constCharP) + 1]; strcpy(this->m_charArray, constCharP); }}
请教助教,曰不行。
MyString(constArr.m_charArray); 创建了一个匿名对象和copy 构造函数没有一点关系。
这是正确的!你可以测试一下,在copy构造函数中,定义一个MyString变量标志(变量是内存块的别名嘛!)创建的对象。记录其地址。和copy构造函数返回的对象的地址,的确不是同一个。
看书,曰可以!
就是要将调用的函数放到参数列表上。如下:
MyString::MyString(const MyString & constArr) :MyString(constArr.m_charArray){}
这里我进行了一点归纳,参数列表进行了初始化,也就是实现了对象从无到有的过程,函数体仅仅对其进行了修改。
下面贴出完整代码,感兴趣的同学,可以测试一下:
//MyString.h#ifndef MY_STRING_H_#define MY_STRING_H_#include<cstdio>class MyString{public: MyString(const MyString & constArr); MyString::MyString(const char* constCharP); void printMyStr() { printf("%s", m_charArray); }private: char* m_charArray;};#endif // !MY_STRING_H_
//MyString.cpp#define _CRT_SECURE_NO_WARNINGS#include"MyString.h"#include<iostream>MyString::MyString(const MyString & constArr) :MyString(constArr.m_charArray)//MyString::MyString(const MyString & constArr){ MyString annoyMyStr = MyString(constArr.m_charArray); //null; printf("%p", annoyMyStr); /*if (constArr.m_charArray) { this->m_charArray = new char[strlen(constArr.m_charArray) + 1]; strcpy(this->m_charArray, constArr.m_charArray); }*/}MyString::MyString(const char* constCharP) :m_charArray(NULL){ if (constCharP) { this->m_charArray = new char[strlen(constCharP) + 1]; strcpy(this->m_charArray, constCharP); }}
//Source.cpp#define _CRT_SECURE_NO_WARNINGS#include"MyString.h"#include<iostream>#include<numeric>using namespace std;int main(){ char* testItem = "hello"; MyString firstStr(testItem); MyString secondStr(firstStr); //printf("\n%p", secondStr); firstStr.printMyStr(); cout << endl; secondStr.printMyStr(); std::system("pause"); return EXIT_SUCCESS;}
0 0
- C++构造函数复用问题
- C#virtual详解,virtual和构造函数的问题
- 【C++】构造函数里面的多态的问题
- C++_子类与基类的构造函数问题
- 【C++】C++中的Sequence Point,构造函数等问题
- 【C++】拷贝构造函数
- C#:静态构造函数
- C++:拷贝构造函数
- explicit构造函数(C++)
- C++:关于构造函数
- C++-构造函数
- C++String构造函数
- c++-转换构造函数
- c++"拷贝构造函数
- C++: 拷贝构造函数
- object-c 构造函数
- C#构造函数
- objective-c 构造函数
- HTML5复习 (10)
- POJ3041 Asteroids (最小顶点覆盖)
- 算法的时间复杂度和空间复杂度-总结
- robotframework 操作弹出div
- ImageLoder缓存图片及ListView多条目加载
- C++构造函数复用问题
- jquery事件
- javaScript基础语法01-上下2部分
- 愿你躲过所有oracle的坑
- "随时"退出程序
- 第1章 Java 多线程技能
- 算法-插入排序
- Spring Cloud构建微服务架构(二)服务消费者
- POJ1068模拟