GeekBand​boolanC++ 笔记第二周

7.三大函数 拷贝构造 拷贝赋值 析构

#ifndef   _MYSTRING_

#define  _MYSTRING_

code

#endif  首先是防卫式声明

如果  class带有指针 那么不能使用编译器的自带拷贝功能

class with pointer members --> copy ctor /copy operator assignment


既可以在类的声明中,也可以在函数定义中声明缺省参数,但不能既在类声明中又在函数定义中同时声明缺省参数。!!!!!!!!!!!!缺省参数只能有一个声明。

像视频中那样声明和定义都有缺省参数是不行的!!!

拷贝赋值的时候

要考虑自我赋值的情况


当设计拷贝赋值的时候

8. 堆,栈与内存管理

  char* get_str()const {      这里如果不加const 的话
   return m_data;
  }                                        //下面编译就过不了 因为下面定义的是      const 类型的a 自然不能有个可以允许修改的函数调用?

std::ostream& operator<<(std::ostream& os,const String&a){
 std::cout<<a.get_str();    //c语言中可以输出一个字符数组
 return os;                          
}

用new 出来的对象不会随着scope结束而中结

complex stack object /auto object/

写成static complex c2(1,2); 离开大括号的时候还在的。

写在任何大括号之外的变量 未grobal objetct  全局有效

delete 一个指针

complex*p= new complex;

这样离开作用域的时候p会死掉 但是complex不会;

new

先分配memory 在调用ctor  copy strucor

void *men=operator new(sizeof(complex)); 内存分配 调用malloc;

pc=static_cast<complex*>(men); //指针的转型操作 指针的转型

pc->Complex::Complex(pc/*隐藏参数*/,1,2);

delete

先调用析构函数

delete ps;

String::~String(ps);//内部调用析构函数; 自己杀掉多余的部分

operator delete(ps);//释放内存//调用free;

有中括号的new  称为 array new  有中括号的new 要搭配有中括号的delete  array delete;

有中括号会多次调用析构函数

析构函数调用不够 就会memery leak

10.拓展补充 类模板 函数模板 及其他

1.静态 static

c1.real() ====》》 complex::real(&c1)  编译的角度

在编译器中 成员函数只有一个 this未隐式的参数 可以在函数里面用它

static 脱离了对象 在内存种单独有一份

class Account{

public :

static double m_rate;

static  void set_rate(const double &x){m_rate=x}

};

double Account::m_rate=8.0;这是必须的

int main{

Account::set_rate(9.0);

Account a;

a.set_rate(7.0);

以上两种设置static 变量的方法都是可行的

}

2.cout;

3.类模板

template<typename T>    告诉编译器T目前还没有绑定

class complex{

。。。

}


使用的时候这样

complex<double> 会进行替换;

4.function template

经典代码

template<class T> 这里和 typename 相通

inline T& min(T& a,T&b){

return a>b? b:a ;

}

5.namespace

namespace std{


}

using directive //全部打开

using namespace std

using declearation//打开一个

using std::cout;

直接使用(

std::cin<<

11面向对象编程

1.Composition(复合)

设计模式adapter

构造由内而外

析构由外而内

2.Delegation(委托)   Composition by reference

3.inheritance(继承)搭配虚函数

non-virtual            不希望被重载                                     void objected()const;

virtual                   希望被重载                              virtual void error(const std::string& msg);                                                           

pure vitual 一定要被重新定义                              virtual void draw()const=0;

在成员函数前加上virtual 便成为虚函数

函数继承调用权

语法

template<typename _tp>

struct _List_node

: public _List_node_base

{

_tp _M_data;

};





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值