CPP学习笔记

2023.10.16

今天开始看Effective C++和侯捷的面向对象高级编程

主要是Effective C++的第一章内容

Copy构造函数和copy assignment操作符

class Student
{
public:
  int t;
  Student();
  Student(const Student &o);
  Student &operator=(const Student &a);
};
Student a;           // 1
Student s(a);        // 2
Student b;           // 3
b = a;               // 4
Student c = a;       // 5

1使用default构造函数,2使用copy构造函数,4使用的是copy assignment操作符,而5使用的是copy构造函数。只要有新对象被定义,一定使用了构造函数

C++的几个层次

Object-oriented面向对象

Template泛型编程

STL库

取代#define

Class专属常量的声明式和定义式

一般情况下,class的专属常量只需要声明式,就像:

static const int Num = 5;

只要不取地址是不需要定义式的。

如果需要写定义式,应该写成

const int ClassName::Num;

因为在声明时已经复制,因此定义时不需要赋值。如果某些旧式编译器不支持在声明式赋初值,就在定义式中赋初值。在此时如果在类中需要定义一个数组的成员数量为该常量时,常量没有被赋值,可以使用the-enum-hack,即使用一个枚举类型的数值权当常量int使用。

对于单纯常量,最好以 const 对象或 enum 替换#define

宏函数

对于形似函数的宏 ,最好改用 inline 函数替换 #define

​​​Const

如果关键字 const 出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两者都是常量。

迭代器中的const

迭代器可看作指针(或智能指针),为迭代器声明const是将指针视为常量,如果要把迭代器所指之物不可改动,需要使用const_iterator。

physical constness和logical constness

physical constness是指成员函数不更改对象的任意成员变量时使用const,但是会出现以下“反常识”情况:某个成员函数更改了指针的所指值,只有指针隶属于对象。

logical constness 是指在逻辑上(?)不更改

上图中就是logical constness ,但是无法通过编译器,需要引入关键字mutable

当 const 和 non-const 成员函数有着实质等价的实现时,令 non-const 版本调用 const 版本可避免代码重复。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值