首页 » C++ » 类和对象

类和对象

原文 http://blog.csdn.net/qq_38374716/article/details/79195219

2018-01-30 02:00:54阅读(244)

构造函数:
/*
1.函数名和类名相同,没有返回值,不需要用户显示调用
2.在创建对象时自动调用 作用:对新建对象初始化
3.允许重载–>这就意味着创建一个的对象只能调用一个构造函数
4.默认构造函数–>,没有形参,函数体为空
5.一个类必须有一个构造函数,一旦用户自定义构造函数,编译器就不会生成默认构造函数
6.构造函数的参数列表–>对成员变量进行初始化赋值
*/
class A{
private:
int m_a;
char* m_b;
float m_c;
public:
void print(){};
A(){ cout << “没有参数的构造函数” << endl; }
A(int a){ m_a = a; cout << “有参数的构造函数” << endl; }
A(int a, char* b, float c);
};
//参数列表仅仅是构造函数的附加功能,构造函数体内依然可以编写
A::A(int a, char* b, float c) :m_a(a), m_b(b)
{
m_c = c;
cout << “参数列表” << m_a << m_b << m_c << endl;
}
int main()
{
A m;//调用的是没有参数的构造函数
/A n(); 不能这么写/
A q(1);
A* i = new A;
A* n = new A();

A c(1,"name",2.3);
A* d = new A(2,"sex",6.9);
system("pause");

}

析构函数:
/*
1.销毁对象时系统自动调用析构函数进行清理工作 销毁对象–>销毁栈区,堆区都算
2.没有参数,不能被重载,一个类也只能有一个析构函数
3.new,delete与malloc(),free()最大的区别:
new分配内存时会调用构造函数,delete释放内存时会调用析构函数
4.全局对象–>程序结束执行时调用虚构 局部变量(函数体内)–>函数执行结束时调用析构函数
例子见2_6
5.记住练习2_5
*/

this指针
/*
1.和python中self是一样的,指向当前对象,通过this可以访问当前对象的所有成员
2.我的理解是:在类中创建一个虚拟的对象,方便在成员函数中访问成员变量
3.是const指针–>只能指向一个固定的内存的空间,其值不能被修改
4.this是在类的内部,但是在对象被创建的时候才会给this指针赋值,(编译器自动赋值)
编译器在编译阶段将对象的地址作为实参传递给this指针–>this指针得以初始化
5.
*/

static关键字(声明时加static)
一.静态成员变量
1.多个对象之间共享数据 (共享的理解):对同一块内存的操作,每个对象都可以访问这个成员变量
2.静态成员变量属于类,不属于任何一个对象
3.首先要在类体中加static声明,然后在类外初始化(不能再加static),如果不赋值,默认赋值0
注意:静态成员变量的内存是在类外初始化时分配的(内存在全局数据区),类外初始化不可少
4.我的理解:静态成员变量和普通的变量实质是一样的,不过静态成员变量只能被同一类的对象访问

5.访问方式: 背景–>class A 全局变量m A a A* b = new A
类访问–>A::m
对象访问–>a.m
对象指针–>b->m
二.静态成员函数
1.静态成员函数没有 this 指针,并没有和某一对象形成绑定关系,可以直接由类来调用
2.我的理解:静态成员函数服务于静态成员变量,不依赖于具体的对象而存在
3.最大的特点:没有this指针,只能访问静态成员(静态成员函数,静态成员变量)
4.注意点:声明时要加上static,定义时不能加

const关键字(常)
一.const成员变量
1.初始化只能通过构造函数参数初始化表
二.const成员函数(常成员函数)
1.能使用类中的成员变量,但是不能修改他们的值(目的:保护数据)
2.注意:声明和定义时都要在()加上const

三.const对象(常对象)
1.只能访问常成员函数,只能访问成员变量,但不能修改其值
2.我的理解:常对象中成员不能变,所以只能访问常成员函数(普通的成员函数可能改变成员变量的值),不能修改成员变量的值

友元函数
1.使其他类中的成员函数以及全局范围的函数访问当前类的private成员,在当前类进行友元函数的
声明(函数可以是其他类的成员函数,也可以是非成员函数)
2.函数的形参是指向当前类类型的对象的指针,通过对象指针来访问私有属性
3.我的理解:在当前类给这个函数特权,允许其访问当前类的私有属性,友元声明就是给特权的动作
当前类的成员函数本来就可以访问私有属性,对他进行友元声明没有意义。
二位数组做形参第一不要写 int a[][4]

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹