对象语义的一种实现方法
2017-02-26 00:09
246 查看
对象语义:
1:对象语义就是只有一个对象,不支持拷贝复制等操作。2:面向对象和使用对象:
1:面向对象:对象语义,是浅拷贝的实现方式,实际只有一个对象,不支持拷贝。
2:使用对象:值语义,实现了深拷贝的称之为值语义,因为实现了多个,拷贝后与原对象无关。
3:原码及讲解:
//-----------------------------------------------Text.h---------------------------------------------------
#ifndef TEXT_H_ #define TEXT_H_ namespace PoEdu { class NonCopyable { protected: NonCopyable(){} // NonCopyable(const NonCopyable&other) = delete;//此处为了验证delete的方法是不可以重载的 private: NonCopyable& operator=(NonCopyable&other) = delete;//在派生类自己没有实现这两个方法的时候,就不会默认生成了。 NonCopyable(const NonCopyable&other) = delete;//这里只需要将两个方法放在private里面就可以,可以写上=delete但是布恩那个写成=default };//派生类没写这两个方法,就会默认调用基类的,但是调用不了,所以实现了对象语义。 class Text :private NonCopyable { public: Text(){} ~Text(){} //如果这里写过了op=和拷贝构造,那么即使继承于NonCopyable也无法实现对象语义。 /*Text(const Text&other)override//如果拷贝构造没在private里面且=delete,这里写上override就是错的,delete的方法是不可以重载的。 { } Text& operator=(Text&other) { return *this; }*/ }; } #endif//!TEXT_H_//-----------------------------------------------main.cpp---------------------------------------------------#include <iostream>#include "Text.h"int main(){using namespace PoEdu;Text t;Text tt(t);//将会调基类的用拷贝构造函数,调用不到Text t1;t1 =
t;//将会调用基类的赋值函数,但是调用不到return 0;}
最终会报错:
1>------ 已启动生成: 项目: ObjectMeanDemo, 配置: Debug Win32 ------
1> main.cpp
1>f:\electric\po\c++项目课\objectmeandemo\objectmeandemo\text.h(26): error C2248: “PoEdu::NonCopyable::NonCopyable”: 无法访问 private 成员(在“PoEdu::NonCopyable”类中声明)
1> f:\electric\po\c++项目课\objectmeandemo\objectmeandemo\text.h(11) : 参见“PoEdu::NonCopyable::NonCopyable”的声明
1> f:\electric\po\c++项目课\objectmeandemo\objectmeandemo\text.h(6) : 参见“PoEdu::NonCopyable”的声明
1> 此诊断出现在编译器生成的函数“PoEdu::Text::Text(const PoEdu::Text &)”中
1>f:\electric\po\c++项目课\objectmeandemo\objectmeandemo\text.h(26): error C2248: “PoEdu::NonCopyable::operator =”: 无法访问 private 成员(在“PoEdu::NonCopyable”类中声明)
1> f:\electric\po\c++项目课\objectmeandemo\objectmeandemo\text.h(10) : 参见“PoEdu::NonCopyable::operator =”的声明
1> f:\electric\po\c++项目课\objectmeandemo\objectmeandemo\text.h(6) : 参见“PoEdu::NonCopyable”的声明
1> 此诊断出现在编译器生成的函数“PoEdu::Text &PoEdu::Text::operator =(PoEdu::Text &)”中
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
相关文章推荐
- 对象语义的一种实现方法
- 对象语义的一种实现方法
- 对象语义的一种实现方法
- 对象语义的一种实现方法
- 对象语义的一种实现方法
- 对象语义的一种实现方法
- 对象语义的一种实现方法
- 对象语义的一种实现方法
- 单例模式-Singleton Pattern 确保对象的唯一性——单例模式 (四):一种更好的单例实现方法(静态内部类)
- 【怎样写代码】确保对象的唯一性 -- 单例模式(五):一种更好的单例实现方法(静态内部类)
- 实现一种快速查找Richedit中可见区域内OLE对象的方法
- [Delphi] 实现自动化对象的一种简易方法
- EasyDarwin开源流媒体服务器中一种实现对作用域内new对象自动释放的方法(值得借鉴)
- 百度面试题 c++ 实现引用类型与被引用的对象分离的一种方法
- EasyDarwin开源流媒体服务器中一种实现对作用域内new对象自动释放的方法(值得借鉴)
- 实现一种快速查找Richedit中可见区域内OLE对象的方法
- C++插件机制的一种实现方法(对象工厂)
- 【转贴】一种在BIOS中嵌入应用程序的方法及实现
- 截取其他程序文本框和密码框内容的一种实现方法
- javascript实现语法分色编辑器...(同时支持动态读取对象方法)