目录
C++中struct和class的区别;
在C++中,因为C++要兼容C语言,所以在C++中struct可以和在C语言中一样当成结构体使用。此外C++中Struct还可以用来定义类,与使用class定义类的唯一区别就是:class的成员默认访问方式是private、而Struct的成员默认访问方式是public。
class的简单结构;
class name{
//访问限定符,作用域从当前位置开始到下一个访问限定符或者类的结束。
public: //共有,可被外界访问,可以做为外界访问类内private的中介,安全性差,
private: //私有,不可直接被外界访问,安全性高
protected: //保护,与私有成员相似,但可被派生类(子类)访问。
};
外部调用类内公有函数操作私有成员的格式(封装性);
class_name.member_fun();
类的实现有那些方式,有什么异同;
1、声明与实现在类内;
2、声明与实现分开写,声明可以写在头文件文件(.h)中,实现写在C++文件(.cpp)中。
唯一区别:声明与实现在类内,编译器会自动将其扩展为内联函数。
面向对象的编程的4大特点:
抽象、封装、继承、多态。
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
封装的本质:一种管理方式。
封装的目的:安全。
类的实例化:(不要画大饼)
类的大小:
空类-------->一个字节(低保)
字节对齐的现象:
eg1.
class Test{
private:
char a;
double b;
int c;
};
#include<iostream>
#include<string>
using namespace std;
class Test{
private:
char a;
double b;
int c;
};
void main(){
cout << "Test :" << sizeof(Test) << endl;
}
eg2.
class Test{
private:
char a;
int c;
double b;
};
#include<iostream>
#include<string>
using namespace std;
class Test{
private:
char a;
int c;
double b;
};
void main(){
cout << "Test :" << sizeof(Test) << endl;
}
类内函数不会改变类的大小。
class_name T1,T2,T3,T4,...,T4;
this指针(隐藏)普通成员函数:
特性:
1、this指针的类型:类 类型 *const;
2、只能在“成员函数”的内部使用;
3、本质上,一个成员函数的形参,对象中不存储this指针;
4、为第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不许用户传递。
示例代码:
#include<iostream>
using namespace std;
class A{
public:
void m_fun();
void SetA4(int a)
{
a4 = a;
}
void Show()
{
cout << "a4 = " << a4 << endl;
}
private:
int a4;
};
void A::m_fun(){
cout << "This is A::m_fun()" << endl;
}
void main(){
A a;
a.m_fun();
a.SetA4(10);
a.Show();
}