目录
1.类的引入
2.类的定义
3.类的访问限定符及封装
1.访问限定符
2.封装
3.类的作用域
4.类的实例化
5.类对象模型
1. 如何计算类对象的大小
6.this指针
1. this指针的引出
2 .this指针的特性
1.类的引入
C
语言中,结构体中只能定义变量,在
C++
中,结构体内不仅可以定义变量,也可以定义函数
struct Student
{
void SetStudentInfo(const char* name, const char* gender, int age)
{
strcpy(_name, name);
strcpy(_gender, gender);
_age = age;
}
void PrintStudentInfo()
{
cout << _name << " " << _gender << " " << _age << endl;
}
char _name[20];
char _gender[3];
int _age;
};
int main()
{
Student s;
s.SetStudentInfo("Peter", "男", 18);
return 0;
}
在
C++
中更喜欢用
class
来代替struct.
2.类的定义
1. 声明和定义全部放在类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。
2.声明放在.h文件中,类的定义放在.cpp文件中
实际中,一般情况下,短小函数可以直接在类里面定义,长一点函数声明和定义分离
3.类的访问限定符及封装
1.访问限定符
1. public修饰的成员在类外可以直接被访问
2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4. class的默认访问权限为private,struct为public(因为struct要兼容C)
2.封装
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行
交互。
封装:更严格管理设计
1、数据和方法封装到一起,放在类里面
2、想给你自由访问的设计成共有,不想给你直接访问的设计成私有
3.一般情况设计类,成员数据都是私有或者保护,想给访问的函数是共有,不想给你访问时私有或保护
3.类的作用域
类定义了一个新的作用域
,类的所有成员都在类的作用域中
。
在类体外定义成员,需要使用
::
作用域解析符指明成员属于哪个类域。
2.封装
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行
交互。
封装:更严格管理设计
1、数据和方法封装到一起,放在类里面
2、想给你自由访问的设计成共有,不想给你直接访问的设计成私有
3.一般情况设计类,成员数据都是私有或者保护,想给访问的函数是共有,不想给你访问时私有或保护
3.类的作用域
class Person
{
public:
void PrintPersonInfo();
private:
char _name[20];
char _gender[3];
int _age;
};
// 这里需要指定PrintPersonInfo是属于Person这个类域
void Person::PrintPersonInfo()
{
cout<<_name<<" "_gender<<" "<<_age<
4.类的实例化
首先要明白:用类创建对象的过程,称为类的实例化
1.
类只是
一个
模型
一样的东西,限定了类有哪些成员,定义出一个类
并没有分配实际的内存空间
来存储它
2.
一个类可以实例化出多个对象,
实例化出的对象
占用实际的物理空间,存储类成员变量
5.类对象模型
1. 如何计算类对象的大小
一个类创建对象时,只保存成员变量,成员函数存放在公共的代码段
计算类大小的方式与之前在c语言中算结构体的大小方法一样。
注意空类的大小,空类比
较特殊,编译器给了空类一个字节来唯一标识这个类。
6.this指针
1. this指针的引出
问题:Date类中有SetDate与Display两个成员函数, 函数体中没有关于不同对象的区分,那当d1调用SetDate函数时,该函数是如何知道应该设置s1对象,而不是设置s2对象呢?
C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
调用的都是同一个函数,但this指针不能直接写出来
2 .this指针的特性
1. this
指针的类型:类类型
* const
2.
只能在
“
成员函数
”
的内部使用
3.
this
指针本质上其实是一个成员函数的形参
,是对象调用成员函数时,将对象地址作为实参传递给
this 形参。所以对象中不存储
this
指针
。
4.
this
指针是成员函数第一个隐含的指针形参,一般情况由编译器通过
ecx
寄存器自动传递,不需 要用户
传递



