
C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。
C++同时对struct进行了升级,把struct 升级成了类
1、结构体名称可以做类型
2、里面可以定义函数
//结构体的定义,在C++中更喜欢用class来代替 class U { int a; char b; int add(int x, int y) { return x + y; } };class 为 定义类的关键字, 类中的元素称为 类的成员: 类中的 数据 称为 类的属性 或者 成员变量 ; 类中的 函数 称为 类的方法 或者 成员函数。
1.1 类的两种定义方法 1.1.1 声明和定义全部放在类体中
- 类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它
- 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类成员变量
class U
{
public:
int a;
char b;
int add(int x, int y)
{
return x + y;
}
};
成员函数如果在类中定义,编译器可能会将其当成内联函数处理
1.1.2 声明定义分开,声明放在.h文件中,类的定义放在.cpp文件中
Func.h
class U
{
public:
int a;
char b;
//在类里面定义的函数,默认是inline,内联函数
int mul(int x, int y)
{
return x * y;
}
//在类里面声明,在.cpp里面定义
int Add(int x, int y);
int Sub(int x, int y);
};
Func.cpp
#include "Func.h"
//用'::'符号进行访问
int U::Add(int x, int y)
{
return x + y;
}
int U::Sub(int x, int y)
{
return x - y;
}
实际中,短小函数可以直接在类里面定义, 长一点函数声明和定义分离
一般情况定义和声明分开更好
1.public(共有) 2.private(私有) 3.protected(保护)
访问限定符使用:
- public修饰的成员在类外可以直接被访问
- protected和private修饰的成员在类外不能直接被访问(protected和private是类似的)
- 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
- class的默认访问权限为private,struct为public(因为struct要兼容C),两者相反
class U { public: int Add(int x, int y) { return x + y; } private: int a; int b; int c; };
class U
{
public:
int Add(int x, int y);
private:
int a;
int b;
int c;
};
int U::Add(int x, int y)
{
return x + y;
}
类对象的存储方式:只保存成员变量,成员函数存放在公共的代码段
//大小:16字节
class A
{
public:
int Add(int x, int y)
{
return x + y;
}
private:
int a;
char b;
double c;
};
//大小:16字节
class B
{
public:
int a;
char b;
double c;
};
//大小:1字节
class C
{
public:
int Add(int x, int y)
{
return x + y;
}
};
一个类的大小,实际就是该类中”成员变量”之和,当然也要进行内存对齐(
结构体内存对齐规则
),注意空类(
成员只有函数
)的大小,空类比较特殊,编译器给了空类
一个字节
来唯一标识这个类。