
博主:大大怪先森(记得关注哦!)
编程环境:vs2013
所示代码:码源
准备前言一、类的引入二、类的定义三、类的访问限定和封装四、类的对象模型
4.1如何计算类对象的大小4.2类对象的存储方式 五、this指针
5.1this指针的引出5.2this指针的特性结语
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成
提示:以下是本篇文章正文内容,下面案例可供参考
一、类的引入C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数
struct Student
{
//成员变量
char _name[10];
int _age;
int _id;
//成员函数
void Init(const char* name, int age, int id)
{
strcpy(_name, name);
_age = age;
_id = id;
}
void Print()
{
cout << _name << endl;
cout << _age << endl;
cout << _id << endl;
}
};
二、类的定义上面结构体的定义,在C++中更喜欢用class来代替
三、类的访问限定和封装class className { // 类体:由成员函数和成员变量组成 }; // 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束>时后面分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类>中的函数称为类的方法或者成员函数。
类的两种定义方式:
1.声明和定义全部放在类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。class Student { private: //成员变量 char _name[10]; int _age; int _id; public: //成员函数 void Init(const char* name, int age, int id) { strcpy(_name, name); _age = age; _id = id; } void Print() { cout << _name << endl; cout << _age << endl; cout << _id << endl; } };2.2. 声明放在.h文件中,类的定义放在.cpp文件中
一般情况下,更期望采用第二种方式。
四、类的对象模型 4.1如何计算类对象的大小C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问
权限选择性的将其接口提供给外部的用户使用。
说明:public修饰的成员在类外可以直接被访问protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止class的默认访问权限为private,struct为public(因为struct要兼容C)
注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别
4.2类对象的存储方式计算类或者类对象大小,只看成员变量,考虑内存对齐,C++内存对齐规则跟c结构体一致
class Stack { public: void Init() { _a = nullptr; _top = _capacity = 0; } void Push(int x) { } int Top() { assert(_top > 0); return _a[_top - 1]; } private: int* _a; int _top; int _capacity; }; //类中仅仅有成员函数 class A2 { public: void f2() { } //类中什么也没有的话,是一个空类大小是1 // 空类会给1byte,这1byte不存储有效数据,只是为了占位,表示对象存在 }; int main() { Stack st; st.Init(); cout << sizeof(Stack) << endl; cout << sizeof(st) << endl; return 0; }
特殊:空类会给1byte,这1byte不存储有效数据,只是为了占位,表示对象存在
五、this指针 5.1this指针的引出对象只保存成员变量,成员函数存放在公共的代码段
5.2this指针的特性C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
his指针的类型:类类型* const
2. 只能在“成员函数”的内部使用
3. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实>参传递给this形参。所以对象中不存储this指针。
4. this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传>递,不需要用户传递
编译器处理成员函数隐藏的this指针。
希望本篇文章能给各位带来帮助,如有不足还请指正!!! 码字不易,各位大大给个收藏点赞吧!!!