头文件和类的声明
inline
inline修饰函数,是给编译器的一个建议,到底是否为inline由编译器来决定,inline修饰的函数在使用时是做简单的替换,这样就避免了一些函数栈空间的使用,从能提升效率。从另一种角度看,是替代宏的一种方法。
函数若在class body 内定义完成则自动成为 inline 的候选人
构造函数放在 private 区
#include <stdio.h>
#include<stdlib.h>class A {
public: static A& getInstance();private:A();A(const A& rhs);
};A& A::getInstance()
{static A a;return a;
}
A::getInstance();
比如像单例模式,不想让别人随意创建对象
const
const函数表示函数不会改变成员变量内容,不改变成员变量的函数一定要加。如果声明一个const的类对象,表明这个类对象里面的值不能修改,但是类成员函数没有声明成cosnt,这样就会报错。
COW:copy on write,写时复制,在写的时候才进行复制,没写的时候,共享同一个字符串
charT
operator[] (size_type pos) const {
//不必考虑写时复制的问题,效率高,string[1]
}reference
operator[] (size_type pos){
//要考虑写时复制的问题,string[1] = 't'
}
当成员函数的const版本和non-const版本同时存在的时候,const 对象只能调用const版本,non-const对象只能调用non-const版本
值传递和引用传递
尽量不要值传递,建议使用引用传递。引用传递底部是一个指针,一个指针四个字节。如果不希望函数修改引用的值,可以加const加以限制。函数返回值也尽量使用引用。
引用传参,传递者无需知道接收者以什么引用形式接收。
友元
一个类想要拿到另一个类的私有成员变量,那么就需要在另一个类中把这个类声明为友元。但是同一个类之间的不同实例能够取到彼此之间的私有成员变量,因为,相同class的各个对象互为友元。
- 数据放在private中
- 参数传递使用引用
- 返回值使用引用
- const,应加尽加
操作符重载
- 写成成员函数
所有的非static成员函数都包含一个隐含的 this 指针,返回的是类引用
- 非成员函数
不能返回类引用,因为非成员函数操作符重载,一定会在函数方法内新建一个类对象来接收操作结果,如果返回引用,这个新对象在出了函数体之后,生命周期就结束了,引用就是失效了。所以只能返回值。
参考文章:侯捷C++八部曲笔记(一、面向对象)_Wanncye的博客-CSDN博客