C++学习笔记-----类和构造函数
类和结构体
class和struct的区别在于class默认是private的而struct默认是public的
struct 继承自另一个 struct 或 class 时,默认继承方式是 public 继承
class 继承自另一个 class 或 struct 时,默认继承方式是 private 继承
class 继承自 struct,则默认继承方式还是 public,以保持 struct 的开放性
两者的内存位置取决于其声明创建的位置,局部函数则存于栈,全局则存于全局区
构造函数和析构函数
构造函数:非成员函数,并且在创建对象时由编译器自动调用执行一次,可以重载
析构函数:在对象销毁时自动调用,回收内存空间,只有一个并且无参
构造函数可以在创建对象时使用小括号把构造参数传进去,以下是构造函数中无参、有参、拷贝的示例:
class Person{
public:
int age;
Person(){
cout<<"non-parameter constructor "<<endl;
}
Person(int a){
age = a;
cout<<"Parameterized constructor"<<endl;
}
Person(const Person &p){
age = p.age;
cout<<"copy constructor "<<endl;
}
~Person(){
cout<<"Destructor function call "<<endl;
}
};
void test(){
Person p1;
Person p2(10);
Person p3(p2);
}
int main(){
test();
system("pause");
return 0;
}
新建一个类,编译器会提供默认的无参构造函数、拷贝构造函数、析构函数,如果自己写了对应的函数,编译器就不再提供对应的函数,例如以上的Person Clas,编译器不再提供对应的构造函数和析构函数;
值得一提的是编译器提供的拷贝构造函数是浅拷贝,只是简单的复制,如果要进行深拷贝必须自己重载拷贝构造函数;
嵌套对象和初始化列表
- 在一个类中使用另一个对象作为成员对象,会先构造成员对象,然后再构造外层对象,析构释放资源的顺序则正好相反;
- 初始化列表只能用于普通构造函数,拷贝构造、析构、成员函数等不能使用;用来对类中声明的成员变量进行初始化,初始化的顺序与类中声明的顺序一致;格式为:
构造函数名(形参列表):成员属性1(表达式1),成员属性2(表达式2),成员属性3(表达式3)... {函数体}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?