C++类和对象及其默认成员函数
2017-10-22 16:07
393 查看
类和对象的一些基础:
类是对一个事物的描述,可以看做成一个类型(int.char等),他并没有分配空间。
对象是类定义出来的一个实物。
类的成员访问限定符:public(公有),private(私有)。 私有只可以类内访问。公有内外都可以访问。
类外定义(私有的不可以定义)成员函数需要加作用域访问符;
静态变量需要类内声明,类外定义;
注意:静态的成员函数没有隐含的this指针参数,所以可以使用类型::作用访问直接调用。
类的大小是所有成员变量大小之和。遵循内存对齐规则。
内存对齐规则如图:
位段:
位段:
他们的大小分别是1、1、1、4.
因为没有成员变量的时候,系统会分配一个字节大小进行占位。表示存在。
接下来总结类的六大成员函数:构造函数、拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载、const修饰的取地址操作符重载。
1.构造函数
需要对私有成员变量进行初始化,完成这项工作的就是构造函数,构造函数在定义对象的时候自行执行一次。
1>函数名与类名相同。
2>无返回值。
3>类定义对象时系统自行调用。
4>构造函数可以重载。
5>构造函数可在类内外定义。
6>没有定义构造函数系统会给一个缺省的构造函数 (不确定性,有时候什么事情都不做),但只要定义了,就不会生成默认的。
7>无参的和全缺省的构造函数都认为是缺省构造函数,并且缺省的构造函数只能有一个。
2.拷贝构造函数
1>拷贝构造是构造的重载。
2>拷贝构造参数必须引用传参,否则会递归无限循环。
3 >若是未定义,系统会默认缺省的。(浅拷贝)
3.析构函数
1>析构函数名称为在类名前面加~;
2>析构函数无参数无返回值。
3 >一个类只有一个析构函数,未定义会生成缺省的析构函数。(缺省的构造函数)
4>类的生命周期结束时会自动调用析构函数,先定义先析构,后定义后析构。
5>析构函数是做清理工作(即释放构造函数所开辟的空间)
4.赋值运算符重载
作用:C++支持运算符重载,为了增强代码的可读性。
特征:
1>(返回类型) operator + 合法的运算符 构成函数名称 (加返回类型是为了支持连续赋值)
2>重载不改变优先级问题。 不改变操作个数。
3>C++不能重载的五个运算符 ?: \ sizeof \ :: \ . \ .*
4>已经存在的对象。
类是对一个事物的描述,可以看做成一个类型(int.char等),他并没有分配空间。
对象是类定义出来的一个实物。
类的成员访问限定符:public(公有),private(私有)。 私有只可以类内访问。公有内外都可以访问。
类外定义(私有的不可以定义)成员函数需要加作用域访问符;
静态变量需要类内声明,类外定义;
注意:静态的成员函数没有隐含的this指针参数,所以可以使用类型::作用访问直接调用。
#include<iostream> using namespace std; class Student { public: int i; static int j;//类外声明静态成员变量 void set(char*name, int age);//类外声明成员函数 private: int _age; char* _name; }; void Student::set(char*name, int age)//类外定义成员函数 { _age = age; _name = name; } int Student::j;//类外定义静态成员变量 int main() { Student s1; s1.j = 10; s1.j++; cout << s1.j << endl; system("pause"); return 0; }
类的大小是所有成员变量大小之和。遵循内存对齐规则。
内存对齐规则如图:
位段:
位段:
class AA {}; class A {
void print() { ; } }; class AAA { void print() { ; } void print1() { ; } }; class AAAA { void print() {;} int a; };
他们的大小分别是1、1、1、4.
因为没有成员变量的时候,系统会分配一个字节大小进行占位。表示存在。
接下来总结类的六大成员函数:构造函数、拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载、const修饰的取地址操作符重载。
1.构造函数
需要对私有成员变量进行初始化,完成这项工作的就是构造函数,构造函数在定义对象的时候自行执行一次。
1>函数名与类名相同。
2>无返回值。
3>类定义对象时系统自行调用。
4>构造函数可以重载。
5>构造函数可在类内外定义。
6>没有定义构造函数系统会给一个缺省的构造函数 (不确定性,有时候什么事情都不做),但只要定义了,就不会生成默认的。
7>无参的和全缺省的构造函数都认为是缺省构造函数,并且缺省的构造函数只能有一个。
2.拷贝构造函数
1>拷贝构造是构造的重载。
2>拷贝构造参数必须引用传参,否则会递归无限循环。
3 >若是未定义,系统会默认缺省的。(浅拷贝)
3.析构函数
1>析构函数名称为在类名前面加~;
2>析构函数无参数无返回值。
3 >一个类只有一个析构函数,未定义会生成缺省的析构函数。(缺省的构造函数)
4>类的生命周期结束时会自动调用析构函数,先定义先析构,后定义后析构。
5>析构函数是做清理工作(即释放构造函数所开辟的空间)
4.赋值运算符重载
作用:C++支持运算符重载,为了增强代码的可读性。
特征:
1>(返回类型) operator + 合法的运算符 构成函数名称 (加返回类型是为了支持连续赋值)
2>重载不改变优先级问题。 不改变操作个数。
3>C++不能重载的五个运算符 ?: \ sizeof \ :: \ . \ .*
4>已经存在的对象。
相关文章推荐
- C++类和对象--默认成员函数
- C++类和对象1--四个默认成员函数+运算符重载
- C++类和对象及4个默认成员函数
- C++类和对象.四个默认成员函数(赋值运算符重载)
- C++类和对象、四个默认成员函数、运算符重载
- C++类和对象——四个默认成员函数+运算符重载
- C++类和对象1--四个默认函数+运算符重载
- (继承及其访问限定符)&&(派生类及其默认成员函数)&&(赋值兼容规则)
- C++类对象成员变量和成员函数内存分配的问题
- C++类对象内存模型与成员函数调用分析(上)
- 定义长方体类,数据成员有长、宽、高,成员函数有带默认形参值的构造函数(默认长宽高分别为2.5、3.4、2)、计算体积函数,分别构造默认对象和长宽高分别为6.25、4.8、5.2的对象,输出各对象的体积
- 隐式this指针及C++类中六个默认成员函数
- 【C++】类和对象--基础知识+四个默认成员函数+运算符重载
- C++类对象成员变量与成员函数内存分配问题
- C++类对象内存模型与成员函数调用分析(上)
- C++类对象成员变量与成员函数内存分配问题
- C++类对象内存模型与成员函数调用分析(中)
- C++类的4个默认成员函数
- CPP类和对象1-四个默认成员函数
- C++类对象成员变量与成员函数内存分配问题