类的定义:
class classname
{
//类体:由成员函数和成员变量组成
}: //分号不能省略
一般情况下,将声明放在.h文件中,类的定义放在,cpp文件中
代码实现:
class.h
#pragma once
class Family
{
public:
void showinfo();
void insertnember(char* _name, char* _gender, int age);
public:
char _name[1024];
char _gender[1024];
int _age;
};
class.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "class.h"
#include<iostream>
#include <string.h>
using namespace std;
void Family::insertnember(char* name, char* gender, int age)
{
strcpy(_name, name);
strcpy(_gender, gender);
_age = age;
}
void Family::showinfo()
{
cout << _name << " " << _gender << " " << _age << " " << endl;
}
int main()
{
Family me,you;
me.insertnember("AAA", "男", 23);
you.insertnember("BBB", "女", 21);
me.showinfo();
you.showinfo();
system("pause");
}
通过使用访问限定符,通过访问权限选择性的将其接口供给外部的用户使用
class的默认访问权限为private,struct为public(因为struct要兼容c)
Q:C++中class和struct和区别是什么?
A:C++需要兼容C语言,所以C++中的struct可以定义结构体也可以定义类,struct定义出来的类成员
访问方式默认是public,而class定义出的默认访问方式是private
封装:
隐藏对象的具体属性和具体实现的细节,仅对外展示公开接口和对象交互
类的大小:
一个类的大小实际就是成员变量大小的和,也满足结构体内存对齐规则,空类也要占用一个字节来进行标识这个类
空类一个字节(主流编译器)相当于占位符,区分该类创建的不同对象
如果有3个对象,也是空类,占一个字节,三个对象存放在main函数中,占用三个字节
this指针:
Q:在调用成员函数的时候,编译器是如何得知调用的就是当前对象而不是其他对象呢?
A:C++编译器给每个"成员函数"都增加了一个隐藏的指针函数,该指针指向当前对象,这个操作对于用
户是透明的,编译器自动完成
this指针的特性:
this指针的类型是类类型* const
只能在"成员函数"的内部使用
this指针本质是一个成员函数的形参,对象调用成员函数时,将对象地址作为实参传递给this指针
this指针的传递由ecx寄存器自动传递
Q:this指针存在哪里?
A:ecx寄存器中(编译器不同可能结果不同)
Q:this指针可以为空吗?
A:可以,this传入的函数如果不调用任何函数,不会报错,如果函数内部调用this指向对象,那么
this如果为空,就会报错