Effective C++ 12代码

#include <iostream>
#include <string>
using namespace std;

class Phone
{
public:
	Phone(string name);
	virtual ~Phone(){cout<<"Phone destory"<<endl;}
	virtual void print();
	string GetName(){return m_name;}
private:
	string m_name;
};
Phone::Phone(string name)
: m_name(name)
{
	cout<<"Phone create"<<endl;
}
void Phone::print()
{
	cout<<"phone name:"<<m_name<<endl;
}

class Iphone:public Phone
{
public:
	Iphone(string name, bool IsSiri = 1);
	~Iphone();
	Iphone(const Iphone& rhs);
	Iphone& operator=(const Iphone& rhs);
	virtual void print();
private:
	bool m_bIsSiri;
};
Iphone::Iphone(string name, bool IsSiri)
:Phone(name)
, m_bIsSiri(IsSiri)
{
	cout<<GetName() + " create"<<endl;
}
Iphone::Iphone(const Iphone& rhs)
:Phone(rhs)	//base的copy 函数
{
	cout<< "copy func"<<endl;
	m_bIsSiri = rhs.m_bIsSiri;
}
Iphone& Iphone::operator=(const Iphone& rhs)
{
	cout<< "operator= func"<<endl;
	Phone::operator=(rhs);	//base的赋值操作
	m_bIsSiri = rhs.m_bIsSiri;
	return *this;
}
Iphone::~Iphone()
{
	cout<<GetName() + " destory"<<endl;
}
void Iphone::print()
{
	cout<<"i am"<<" " + GetName();
	if (m_bIsSiri)
	{
		cout<<" and i have siri"<<endl;
	}
	else
	{
		cout<<" and i have not siri"<<endl;
	}
}
int main()
{
	Phone* pPhone = new Iphone("iphone");
	pPhone->print();
	delete pPhone;

	pPhone = new Iphone("HTC", 0);
	pPhone->print();
	delete pPhone;
	pPhone = NULL;

	Iphone iphone("iphone");
	Iphone HTC("HTC");
	HTC = iphone;//operator=
	HTC.print();
	Iphone samsung(HTC);//copy构造函数
	samsung.print();
	return 1;
}

  

时间: 2024-10-07 14:11:00

Effective C++ 12代码的相关文章

More Effective C++----(12)理解&quot;抛出一个异常&quot;与&quot;传递一个参数&quot;或&quot;调用一个虚函数&quot;间的差异

Item M12:理解"抛出一个异常"与"传递一个参数"或"调用一个虚函数"间的差异 从语法上看,在函数里声明参数与在catch子句中声明参数几乎没有什么差别: class Widget { ... }; //一个类,具体是什么类 // 在这里并不重要 void f1(Widget w); // 一些函数,其参数分别为 void f2(Widget& w); // Widget, Widget&,或 void f3(const W

Effective C++ .12 复制对象-拷贝构造函数的编写

当我们自己编写拷贝构造函数时,编译器就不会为该类生成默认拷贝构造函数了,对于assignment operator也是如此. 1. 拷贝构造函数中记得调用父类的拷贝构造函数,或者相应复制过程 class Man { private: int age; public: Man(int _age = 0) : age(_age){} }; class Woman : public Man { public: Woman() {} Woman(const Woman& w) : Man(w) {} W

css代码规范问题重要的有几个

很多人刚开始接触的时候都会遇到很多困难,其中规范的书写格式也较为明显:今天为大家带来一些CSS代码规范的知识. 1.良好的命名规范 ID和class的命名尽可能短,并符合语义.多个单词的拼接用 '-' 符号链接,尽量使用小写字母. 2.代码缩写 CSS代码缩写可以提高你写代码的速度,精简你的代码量. li{font-family:Arial, Helvetica, sans-serif; font-size: 1.2em; line-height: 1.4em; padding-top:5px;

java开发规范总结_代码编码规范

规范需要平时编码过程中注意,是一个慢慢养成的好习惯 1.基本原则 强制性原则:     1.字符串的拼加操作,必须使用StringBuilder:     2.try…catch的用法 try{ }catch{Exception e e.printStackTrace(); }finally{ }//在最外层的Action中可以使用,其它地方一律禁止使用: try{ //程序代码 }catch(Exception e){ //为空,什么都不写 }//在任何场景中都禁止使用 try{ }catch

读汤姆大叔《深入理解javascript系列》笔记一编写高质量代码

感觉大叔的博文真的是很不错 我打算严格要求自己 按照大叔说的,这样我就会更有规范,更有思想的去工作 去写代码(一入代码深似海) 1,尽可能的少用全局变量(污染全局空间,也会和别人的代码 发生冲突造成严重的后果) ---->命名空间模式或者是函数立即自动执行. 2.不管是不是在函数内始终用var来声明变量, 例如: function sum(x, y){ result = x + y; //这里创建了一个隐式全局变量 return result; } 3.避免出现隐式变量 例如在函数中不通过var

拓展欧几里得算法及代码实现

扩展欧几里得算法就是求: ax + by = gcd(a, b) 的一组整数解(x, y) 一.非递归的实现: 首先看a = 60, b = 22的情况: 表格左边是欧几里得算法,右边等式计算ax + by = gcd(a, b)的解 a = 2 × b + 16 16 = a - 2b b = 1 × 16 + 6 6 = b - 1 × 16 = b - 1 × (a - 2b) = -a + 3b 16 = 2 × 6 + 4 4 = 16 - 2 × 6 = (a - 2b) - 2 ×

JS 代码规范

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 </body> 9 10 <script type="text/javascript"> 11 12 * 代码规范 13 1.js 里面语句结束之后

编写超级可读代码的15个最佳实践

译自:http://net.tutsplus.com/tutorials/html-css-techniques/top-15-best-practices-for-writing-super-readable-code/ 译者:蒋宇捷        一月两次,我们重温Nettuts历史上读者最喜欢的文章. 代码可读性是一个计算机编程世界的普遍主题.它是我们作为开发者第一件学习的事情.这篇文章将阐述编写可读性代码十五个最重要的最佳实践. 1 – 注释和文档 集成开发环境IDE在过去的短短几年里走

15.5.1【Task实现细节】 生成的代码

还在吗?我们开始吧.由于深入讲解需上百页的篇幅,因此这里我不会讲得太深.但我会提 供足够的背景知识,以有助于你对整个结构的理解.之后可通过阅读我近些年来撰写的博客文章, 来了解更加错综复杂的细节,或简单地编写一些异步代码并反编译.同样地,这里我只介绍异步 方法,它包含了所有有趣的机制,并且不需要处理异步匿名函数所处的间接层. 说明 警告,勇敢的旅行者—— 前方是实现细节! 本节将描述微软C# 5编译器(随着.NET 4.5的发布而推出)内实现的相关内容.从CTP版到beta版,有些细节变化很大,