C++关于类的一些笔记
来源:互联网 发布:淘宝天刀代购流程 编辑:程序博客网 时间:2024/06/14 11:56
1. 友元函数不能直接访问对象数据成员,也不能通过this指针访问,只能用函数参数传递进来(访问规则和成员函数一致)
Class MyClass {private; int num;public: friend void print(MyClass &);};void print(MyClass &x) { cout << x.num << endl;}
2. 派生类继承基类的成员,访问权限为继承规则和声明时权限最低的那个
3. 函数的参数或返回值不是对象的引用都会调用类的拷贝构造函数构造中间对象
4. 类的拷贝构造函数参数必须为对象的引用,否则会无限递归(拷贝函数也是函数,递归原因参照 3.)
5. 类的构造函数调用顺序遵循:先调用基类,如果继承多个基类,按继承顺序调用;再调用类中成员变量的构造函数,按定义顺序调用;最后再执行该类的函数体
class Derived : public Base2, public Base1 {public: Member member; Derived() : Base1(), Base2(), member() { cout << "Derived" << endl; }};
构造函数函数体执行顺序:Base2->Base1->Member->Derived
6. 有一种情况只能用友元运算符重载而不能用成员运算符重载
complex2 = 100 + complex1;
如果用成员运算符重载,编译器解释为
complex2 = 100.operator(complex1); //编译错误
如果用友元运算符重载则可以这样解决
friend Complex operator + (Complex complex, int num);friend Complex operator + (int num, Complex complex);
7. 如果要delete掉一个指向无名派生类对象的基类指针,派生类的析构函数应该定义为虚函数
class Base {public: //如果基类析构函数不定义为虚函数,delete时只会调用Base的析构函数虎 virtual ~Base() { cout << "~Base()" << endl; }};class Derived : public Base {public: ~Derived() { cout << "~Derived()" << endl; }};int main() { Base *p = new Derived; delete p; return 0;}
0 0
- 关于C的一些学习笔记
- 关于Objective-c内存管理的一些笔记
- 关于C中格式化输出的一些笔记
- C语言中关于指针的一些笔记
- C++关于类的一些笔记
- C#关于类的一些笔记
- 关于类加载机制的一些笔记
- 关于c的一些题
- 关于ROUTER的一些笔记
- 一些关于java的笔记
- 一些关于字符串的笔记
- 关于指针的一些笔记
- 关于"表达式"的一些笔记
- 关于JDBC的一些笔记
- 关于Spring的一些笔记
- 关于范式的一些笔记
- 关于javamail的一些笔记
- 一些关于Fragment的笔记
- C#同步 异步 多线程的联系和区别
- Oracle DBA培训教程:从实践中学习Oracle数据库管理与维护(第2版)笔记
- Ubuntu下安装Nvidia显卡驱动
- 一些常用的linux命令
- linux学习笔记-makefile2
- C++关于类的一些笔记
- equals 和==的区别和联系
- 机房收费系统重构(4)——.NET数据提供程序模型的四个核心元素
- 前端测试系列---header与footer元素
- linux学习笔记-makefile3
- 黑马程序员------------正则表达式
- linux平台学x86汇编(八):条件跳转
- BZOJ 1006: [HNOI2008]神奇的国度 弦图的最小染色问题
- cocos2dx的内存管理机制