C++之类和对象
标签:大小 money class 对象 code 常量 public 成员函数 实现
class
class People
{
public:
void Say();//直接在类内实现也是可以的,反而更快(直接变内联)
People(string name, int age, int money):m_Money(money),m_Age(age),m_Name(name)
{//初始化列表的顺序不决定赋值顺序,成员变量的声明顺序有关};
string m_Name;
~People();
protected:
int m_Age;
private:
int m_Money;
};(注意分号)
void People::Say()
{
coutm_Name
类的基本用法如上,::域解析符
- 类只是一个模板(Template),编译后不占用内存空间,所以在定义类时不能对成员变量进行初始化,因为没有地方存储数据。只有在创建对象以后才会给成员变量分配内存,这个时候就可以赋值了。
类和实例
- 类是创建对象的模板,该类模板实例化的对象共享成员函数,但是各自拥有成员变量的副本
- 对象所占用的存储空间的大小等于各成员变量所占用的存储空间的大小之和(如果不考虑成员变量对齐问题的话)
- 初始化 const 成员变量的唯一方法就是使用初始化列表
- 封闭类对象生成时,先执行所有成员对象的构造函数,然后才执行封闭类自己的构造函数。成员对象构造函数的执行次序和成员对象在类定义中的次序一致,与它们在构造函数初始化列表中出现的次序无关。
- 当封闭类对象消亡时,先执行封闭类的析构函数,然后再执行成员对象的析构函数,成员对象析构函数的执行次序和构造函数的执行次序相反,即先构造的后析构,这是 C++ 处理此类次序问题的一般规律。
- static 成员变量的内存既不是在声明类时分配,也不是在创建对象时分配,而是在(类外)初始化时分配。反过来说,没有在类外初始化的 static 成员变量不能使用。
- static 成员变量不占用对象的内存,而是在所有对象之外开辟内存,即使不创建对象也可以访问
- static静态成员变量必须初始化,而且只能在类体外进行
友元函数、友元类(friend)
- 友元函数不同于类的成员函数,在友元函数中不能直接访问类的成员,必须要借助对象
- 友元的关系是单向的而不是双向的。如果声明了类 B 是类 A 的友元类,不等于类 A 是类 B 的友元类,类 A 中的成员函数不能访问类 B 中的 private 成员。
- 友元的关系不能传递。如果类 B 是类 A 的友元类,类 C 是类 B 的友元类,不等于类 C 是类 A 的友元类。
class和struct区别联系
- 使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认都是 public 属性的。
- class 继承默认是 private 继承,而 struct 继承默认是 public 继承
- class 可以使用模板,而 struct 不能
引用
形式 type &name = data
- type 是被引用的数据的类型,name 是引用的名称,data 是被引用的数据。引用必须在定义的同时初始化,并且以后也要从一而终,不能再引用其它数据,这有点类似于常量(const 变量)。
- 引用必须在定义时初始化,并且以后也要从一而终,不能再指向其他数据;而指针没有这个限制,指针在定义时不必赋值,以后也能指向任意数据。
- 可以有 const 指针,但是没有 const 引用。
- 指针可以有多级,但是引用只能有一级
- 指针和引用的自增(++)自减(--)运算意义不一样。对指针使用 ++ 表示指向下一份数据,对引用使用 ++ 表示它所指代的数据本身加 1
- 引用也是用指针实现的,只是为了书写更漂亮,无法获得引用的地址是因为 &name被编译器转换成data了
const引用
- 使用 const 可以避免无意中修改数据的编程错误;
- 使用 const 能让函数接收 const 和非 const 类型的实参,否则将只能接收非 const 类型的实参;
- 使用 const 引用能够让函数正确生成并使用临时变量。
C++之类和对象
标签:大小 money class 对象 code 常量 public 成员函数 实现
原文地址:https://www.cnblogs.com/ming-fei/p/14608866.html
文章来自:
搜素材网的
编程语言模块,转载请注明文章出处。
文章标题:
C++之类和对象
文章链接:http://soscw.com/essay/91334.html
评论