C++面向对象高级开发课程(第二周)

1. 类中含有指针—— class with pointer member(s) ——的情况经常发生,典型的有:string 类。

2. STL中的 string 类太复杂,copy on write 等等特性。

3. 采用“防卫式头文件声明”。

4. s2 赋值给 s3。

String s3("hello"), s2;
s3 = s2;

5. complier 会默认生成:拷贝构造函数 和 拷贝赋值函数(操作符重载),其执行的原理是按位依次赋值。带指针的类不适合使用默认的构造函数。

String s3(s1); //拷贝构造
String s2 = s3; //拷贝赋值

6. String 类实现原理

class String
{
  public:
    String(const char* cstr=0);
  private:
    char* m_data; //指针动态分配存储空间
}

String::String(const char* cstr)
{
   if (cstr) {
      m_data = new char[strlen(cstr)+1];
      strcpy(m_data, cstr);
   }
   else {
      m_data = new char[1];
      *m_data = ‘\0‘;
   }
}
时间: 2025-01-01 13:05:21

C++面向对象高级开发课程(第二周)的相关文章

C++面向对象高级开发课程(第三周)

一,类与类之间的关系:继承(Inheritance).复合(Composition).委托(Delegation). 二,复合:表示 is-a ,该设计思想可以参照C语言的 struct . 1. 例子:源自STL中queue的源代码. 1 template <class T, class Sequence = deque<T> > 2 class queue { 3 ... 4 protected: 5 Sequence c; // 底层容器 6 public: 7 // 以下完

C++面向对象高级编程(下) 第二周笔记 GeekBand

1.vptr和vtbl 当存在虚函数就会出现虚指针vptr指向虚函数所在位置vtbl 将vptr实现vtbl内容翻译为C: (*p->vptr)n; (* p->vptr[n])(p); 动态绑定: 虚机制 1.指针 2.向上转型保证安全 3.调用的是虚函数 2.this指针 [Template Method] This->Serialize()实现: (*(this->vptr)[n])(this) -动态绑定 3.动态绑定 向上转型 : 指针实现 如 B继承A B b; A a

C++面向对象高级编程(上) 第二周笔记 GeekBand

static: (1)static成员数据:例如像银行IT系统中的利率,并不是每个用户拥有一份,而是所有账户都有统一的利率,可以加static,表明所有账户共有相同利率. static成员数据要在class外定义. 例:class Account{ public: static double m_rate; static void set_rate(const double& x){m_rate=x;} } double Account::m_rate=8.0; (2)static成员函数:没有

极客班GeekBand - C++面向对象高级开发 - 2

极客班GeekBand - C++面向对象高级开发 - 2 极客班GeekBand - C面向对象高级开发 - 2 讲师 - 侯捷 复习Complex类的实现过程 三大函数拷贝构造拷贝复制析构 栈堆与内存管理 Stack VS Heap stack objectsstatic local objectsglobal objects的生命期 heap objects的生命周期 new先分配memory再调用ctor delete先调用dtor在释放memory 动态分配所得内存块memory bl

chromium浏览器高级开发系列第二篇:如何编译最新chromium源码

说一下为什么这么晚才发第二篇,上周和这周department的工作太多了,晚上都是十点半从公司出发,回家以后实在没有多余的精力去摸键盘了.所以请大家包涵! 上期回顾: chromium源码下载: 找个靠谱的vpn(我试过了,网上说的不用vpn拿代码的都不靠谱): 获取depot_tools,解压,设置环境变量; gclient获取python和git,svn,设置环境变量: fetch–nohooks chromium –nosvn=true 获取源码: gclientsync --force

201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结

项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11475377.html 作业学习目标 学习并掌握Java Application程序结构: 学习并掌握Java语言的数据类型与变量: 学会使用Java运算符构造各类表达式: 掌握Java Application输入输出技术: 掌握Java流程控制技术(分支.循环): 掌握Math类.Strin

201771010123汪慧和《面向对象程序设计Java》第二周学习总结

一.理论知识部分 1.标识符由字母.下划线.美元符号和数字组成, 且第一个符号不能为数字.标识符可用作: 类名.变量名.方法名.数组名.文件名等.第二部分:理论知识学习部分 2.关键字就是Java语言中已经被赋予特定意义 的一些单词. ?常见有:class.public.try.catch.if. float.import.void等. 关键字不做变量名. 3.Java有三种注释的方式:   // 注释内容由//一直到此行结束. /*和*/ 定义一个注释块.  /**开始,*/结束 这种注释方法

C++面向对象高级编程(下) 第一周笔记 GeekBand

1.Conversion Function 转换函数 class Fraction{ public: operator double() const { //转换不可能改变类里的成员,通常加上const return (double)(m_numerator / m_denominator); }//把Fraction对象转换成double类型,double()不可有参数,返回类型不用写 private: int m_numerator; int m_denominator; }; Fracti

python课程第二周 内置数据结构——列表和元组

5种内置数据结构:列表.元组.字典.集合.字符串.列表.字典.字符串三种被称为线性结构. 针对线性结构的操作有:切片.封包和解包.成员运算符.迭代. 针对数据结构的操作有解析式:解析式分为列表解析.生成器解析.集合解析和字典解析. 后面三种是Python3.x特有的. 基本框架如下: 一.列表:Python中最具灵活性的有序集合对象类型 列表可包含任何种类的对象:数字.字符串.字典.集合甚至其他列表,这个特性称为异构.还具有可变长度和任意嵌套的特性,属于可变长度序列. (1)列表的初始化,有两种