//c++学习
//标准库非常重要
//要规范自己的代码
complex c1(2,1);
complex c2;
complex* pc = new complex(0,1);
string s1("Hello");
string s2("world");
string* ps

#include<iostream>
using namespace std;
int main() {
int i=7;
cout<<"i="<<i<<endl;
return 0;
}
#include<iostream>
#include"complex.h"//防卫式声明
using namespace std;
int main() {
complex c1(2.1);
complex c2;
cout<<c1<<endl;
cout<<c2<<endl;
c2=c1+5;
c2=7+c1;
c2=c1+c2;
c2 +=3;
c2= -c1;
cout<<(c1=c2)<<endl;
cout<<(c1!=c2)<<endl;
cout<<conj(c1)<<endl;
return 0;
}
class complex {
public:
complex (double r=0,double i=0)
: re (r),im (i);//构造函数才有的初值列,
// { }
complex& operator +=(const complex&);
double real () const {
return re;
}
double imag () const {
return im;
}
private:
double re ,im;
friend complex&_doapl (complex*,const complex&);
}
{
complex c1(2,1);
complex c2;
complex* p = new complex(4);
//构造函数是没有返回值的
}
//构造函数可以有很多个overloading重载同名可以存在重载
//常常发生在构造函数里
class complex {
public:
complex (double r=0,double i=0)//
:re(r),im(i) {
}
complex () :re(0),im(0);
{}//不允许重载
complex& operator += (const complex&);
double real () const {
return re;
}
double imag () const {
return im;
}
private:
double re,im;
friend complex&_doapl (complex*,const complex&);
};
void real(double r) const {
re =r;
}
//构造函数在private区域
//表示这个函数是不可以被外界调用的
class complex {
public:
complex (double r = 0,double i = 0)
:re(r),im(i) {
}
complex& operator +=(const complex&);
double real () const {
return re;
}
double imag () const {
return im;
}
private:
double re,im;
friend complex&_doapl (complex*,const complex&);
};
{
complex c1(2,1);
complex c2;
...
}
//Singleton单份
//可以把构造函数写在private里面
//**在函数的后面加const class分类里对于不改变数据的,在函数的后面加const
//比如把函数拿出来的
//对于上面的代码
{
complex c1(2,1);
cout<<c1.real();
cout<<c1.imag();
}

{
const complex c1(2,1);
cout<< c1.real();
cout<< c1.imag();
}
//要有const的话要都有const.周全的代码正规
//参数传递
class complex {
public:
complex (double r= 0, double i = 0)
:re (r) , im(i) {
}
complex operator += (const complex&);
double real () const {
return re;
}
double imag () const {
return im;
}
private:
double re,im;

friend complex&_dopal (complex*,const complex&);
};
ostrean&
operator<< (ostream& os, const complex& x) {
return os<< '(' <<real (x) <<','
<< imag (x) <<'(';
}
//尽量不要 pass by value 引用就是一个指针
//传递引用防止更改所以我们要pass by reference (to const)
//返回值的传递尽量by reference(to const)
calss complex {
public:
complex (double r = 0,double i = 0)
:re (r), im (i);
{ }
complex& operator += (const complex&);
double real () const {return re;}
double imag () const {return im;}
private:
double re,im;
friend complex&_dopal (complex*, const complex);
};
ostream&
operator << (ostream& os, const complex& x) {
return os << '(' <<real (x) << '.'
<< imag (x) << ')';
}
//尽量使用reference
class complex {
public:
complex (double r = 0,double i = 0)
:re(r),im(i);
{ }
complex& operator += (const complex&);
double real () const {
return re;
}
double imag () const {
return im;
}
private:
double re,im;
friend complex&_doapl (complex*, const complex);
};
inline complex&
_doapl (complex*,const complex& r) {
this->re += r.re;
this->im += r.im;
return *this;
}
//friend(友元)因为我们是朋友所以可以直接取得private里面的re im
//private不让外界取得re im
class complex {
public:
complex (double r = 0,double i = 0)
:re(r),im(i) {
}
int func(const complex& param) {
return param.re + param.im;
}
private:
double re,im;
};
{
complex c1(2,1);
complex c2;

c2.func(c1);
}
//相同的class的各个objects互为friends(友元)
//class body 外的各种定义
//do assignment plus
inline complex&
_doapl(complex* ths, const complex& r) {
ths->re += r.re;//第一参数将会被改动
ths->im += r.im;//第二参数将不会被改动
return *ths;
}
inline complex&
complex::operator += (const complex& r) {
return _doapl (this, s);
}
///什么情况下不可以使用by reference
//c1+c2的时候+完的数值会被改变

//操作符重载—1,成员函数
//所有的成员函数都会带有一个隐藏的参数 this
//不可以在参数列写出来
inline complex&
_doapl(complex* ths,const complex& r) {
ths->re += r.re;
ths->im += r.im;
return *ths;
}
inline complex&
complex::operator +=(const complex& r) {
return _doapl (this,r);
}
{
complex c1(2,1);
complex c2(5);
c2 +=c1;
//??c3 += c2 += c1;
//要考虑到操作符重载,在设计函数的时候要考虑到问号里连续使用的状况
//连串使用的时候

}
//global函数
//class body之外的各种定义
inline double
imag(const complex& x) {
return x.imag ();
}
inline double
real(const complex& x) {
return x.real ();
}
{
complex c1(2,1);
cout << imag(c1);
cout << real(c1);
}
//operator overloading(操作符重载-2,非成员函数
inline complex
operator + (const complex& x, const complex& y) {
return complex (real (x) + real (y),
imag (x) + imag (y));
}
inline complex
operator + (const complex& x,double y) {
return complex (real (x) + y,imag (x));
}
inline complex
operator + (double x,const complex& y) {
return complex (x + real (y), imag (y));
}
--------->>>>> {
complex c1(2,1);
complex c2;
c2 = c1 + c2;
c2 = c1 + 5;
c2 = 7 + c1;
}
//上面的这些函数绝对不可以使用return by reference,
//因为,它们返回的必定是个local object
//也就是说加过的东西没有放的地方,(x + real (y), imag (y))
//typename();
//生命短暂 temp object 临时对象 return complex ();
//构造函数是有默认值的0
------------->>>>>>
inline complex
operator + (const complex& x)
{
return x;
}
inline complex
operator - (const complex& x)
{
return complex (-real (x), -imag (x););
}
{
complex c1 (2,1);
complex c2;
cout << -c1;
cout << +c1;
}
//正号和负号,只有一个参数的前面有+-号
// return complex (-real (x), -imag (x););
//临时对象
//上面的那句是正号没有变化,标准库里的,可以把它reference
--------->>>>>
inline bool
operator == (const complex& x,
const complex& y)
{
return real (x) == real (y)
&& imag (x) == imag (y);
}
inline bool
operator == ( const complex& x,double y)
{
return real (x) == y && imag (x) ==0
}
inline bool
operator == (double x, const complex& y)
{
return x == real (y) &&&imag (y) ==0;
}
{
complex c1(2,1);
complex c2;
cout << (c1 ==c2);
cout << (c1 == 2);
cout << (0 == c2);
}
----------->>
inline complex
conj (const complex& x)
{
return complex (real (x),-imag (x));
}
#include<iostream.h>
ostream&
operator << (ostream& os,const complex& x)
{
return os << '(' << real (x) << ','
<< imag (x) << ')';
}
{
complex c1(2,1);
cout << conj(c1);
cout << c1 << conj(c1);
}
//共轭复数

侯捷C++学习(一)的更多相关文章

  1. 侯捷STL学习(12)--STL相关内容hash+tuple

    layout: post title: 侯捷STL学习(12) date: 2017-08-01 tag: 侯捷STL --- 第四讲 STL相关的内容 Hash Function 将hash函数封装 ...

  2. 侯捷STL学习(11)--算仿+仿函数+适配器

    layout: post title: 侯捷STL学习(十一) date: 2017-07-24 tag: 侯捷STL --- 第三讲 标准库内核分析-算法 标准库算法形式 iterator分类 不同 ...

  3. 侯捷STL学习(十)--容器hashtable探索(unordered set/map)

    layout: post title: 侯捷STL学习(十) date: 2017-07-23 tag: 侯捷STL --- 第二十三节 容器hashtable探索 hashtable冲突(碰撞)处理 ...

  4. 侯捷STL学习(九)--关联式容器(Rb_tree,set,map)

    layout: post title: 侯捷STL学习(九) date: 2017-07-21 tag: 侯捷STL --- 第十九节 容器rb_tree Red-Black tree是自平衡二叉搜索 ...

  5. 侯捷STL学习(八)-- 深度探索deque

    layout: post title: 侯捷STL学习(八) date: 2017-07-19 tag: 侯捷STL --- 第十八节 深度探索deque上 duque内存结构 分段连续,用户看起来是 ...

  6. 侯捷STL学习(七)--深度探索vector&&array

    layout: post title: 侯捷STL学习(七) date: 2017-06-13 tag: 侯捷STL --- 第十六节 深度探索vector vector源码剖析 vector内存2倍 ...

  7. 侯捷STL学习(一)

    开始跟着<STL源码剖析>的作者侯捷真人视频,学习STL,了解STL背后的真实故事! 视频链接:侯捷STL 还有很大其他视频需要的留言 第一节:STL版本和重要资源 STL和标准库的区别 ...

  8. 侯捷STL学习(一)--顺序容器测试

    开始跟着<STL源码剖析>的作者侯捷真人视频,学习STL,了解STL背后的真实故事! 视频链接:侯捷STL 还有很大其他视频需要的留言 第一节:STL版本和重要资源 STL和标准库的区别 ...

  9. 侯捷STL学习(四)--allocator和容器时间的实现关系

    第十一节 分配器 分配器的好坏影响到容器的性能 operator new()里面调用malloc D:\Program Files (x86)\Microsoft Visual Studio 12.0 ...

  10. 侯捷STL学习(五)--allocator和容器之间的实现关系

    第十一节 分配器 STL源码学习----内存管理 分配器的好坏影响到容器的性能 operator new()里面调用malloc D:\Program Files (x86)\Microsoft Vi ...

随机推荐

  1. 信息论相关概念:熵 交叉熵 KL散度 JS散度

    目录 机器学习基础--信息论相关概念总结以及理解 1. 信息量(熵) 2. KL散度 3. 交叉熵 4. JS散度 机器学习基础--信息论相关概念总结以及理解 摘要: 熵(entropy).KL 散度 ...

  2. Vue学习笔记:计算属性

    使用函数的缺点 如果我们想要将数据经过转化后再显示,或者多个数据结合起来进行显示,一般可以直接在数据渲染或者数据绑定的时候书写表达式 如果表达式过于复杂,或者逻辑太多的时候,我们可以将其封装在函数里, ...

  3. Java基础 -2.4

    字符型char类型 在任何的编程语言之中,字符都可以与int进行互相转换,也就是这个字符中所描述的内容可以通过int获取其内容所在的系统编码 public class ddd { public sta ...

  4. jsp页面展示更加商品的分类,控制商品的显示

    我的大概思路是这样的,第一后果获取所有的商品分类 保存在list集合里面,第二从后台获取所有的商品 第三在JSP页面遍历商品分类集合放在页面的左边,然后jsp页面商品详细信息这块,也得先遍历商品分类, ...

  5. Systemverilog for design 笔记(五)

    转载请标明出处 第一章 System Verilog过程块.任务和函数 1.1.    verilog通用目的always过程块(procedural block)(可综合) always过程块的综合 ...

  6. Linux centosVMware zabbix主动模式和被动模式、添加监控主机、添加自定义模板、处理图形中的乱码、自动发现

    一.主动模式和被动模式 主动或者被动是相对客户端来讲的 被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端 主动模式,客户端会主动把监控数据汇报给服务端, ...

  7. Ubuntu操作基本快捷键

    * 打开主菜单 = Alt + F1* 运行 = Alt + F2* 显示桌面 = Ctrl + Alt + d* 最小化当前窗口 = Alt + F9* 最大化当前窗口 = Alt + F10* 关 ...

  8. FFmpeg调用c语言SDK实现日志的打印

    日志文件的三大步 // 导入头文件 #include <libavutil/log.h> // 设置日志级别 av_log_set_level(AV_LOG_DEBUG); //DEBUG ...

  9. Python—数据类型之集合(Set)

    1.集合是一个无序的,且不重复元素的集合.它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的. 2.基本功能包括关系测试和消除重复元素.注意:集合存在的意义就是去 ...

  10. HTML元素和测试用例的简要介绍

    HTML和CSS的基本语法就不出教程,线下自己看电子书即可 HTML元素 标签 内容 属性 标签+内容+属性 <html> <head> <title>我的主页&l ...