【C++】空指针访问成员函数
C++中空指针可以调用成员函数,但是也要注意有没有用到this指针
如果用到this指针,需要加以判断保证代码的健壮性
代码示例123456789101112131415161718192021#include<iostream>using namespace std;class Person {public: void showClassName() { //无this cout << "this is Person class" << endl; } void showPersonAge() { //有this cout << "age = "<< this->m_Age <<endl; } int m_Age;};int main() { Person* p = NULL; p->showClassName();//正常 p->showPersonAge();//报错, ...
【C++】静态成员
静态成员,指的是在c++类中声明成员时可以加上static关键字,这样声明的成员就叫做静态成员(包括数据成员和成员函数)。即声明为static的类成员或者成员函数便能在类的范围内同享。
静态成员变量特点
所有对象共享同一份数据
在编译阶段分配内存
类内声明,类外初始化
访问方式
通过对象进行访问
通过类名进行访问
示例:12345678910111213141516171819202122232425262728#include<iostream>using namespace std;class Person {public: //公共权限 static int m_A; //类内声明静态成员变量private: //私有权限 static int m_B;};int Person::m_A = 100; //类外初始化int Person::m_B = 300;int main() { Person p; Person p2; //公有权限 cout << p.m_A << endl; //通过对象进行访问 ...
【C++】浅拷贝与深拷贝
听说浅拷贝与深拷贝是面试经典问题,也是常见的一个坑
浅拷贝:简单的赋值拷贝操作
深拷贝:在堆区重新申请空间,进行拷贝操作
总结写在前面应该不会有问题吧,不会吧不会吧
总结: 如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题
浅拷贝举个栗子:我是 氷羽藍汐,但我还有个名字叫张三,虽然有两名字,但都是我一个人。
所以,不论谁脑瘫也好骨折也罢,都是我倒霉
代码示例:123456789101112131415161718192021222324252627282930313233#include<iostream>using namespace std;class Person{public: Person(int age,int height) { cout << "Person的有参构造函数调用" << endl; m_Age = age; m_Height = new int(height); } Person(const Person& p) & ...
【C++】初始化列表
作用C++提供了初始化列表语法,用来初始化属性
语法构造函数(参数): 属性1(值1),属性2(值2)...{函数体}
示例:传统初始化操作1234567891011121314151617181920212223#include<iostream>using namespace std;class Person{public: Person(int a, int b, int c) { m_A = a; m_B = b; m_C = c; } int m_A; int m_B; int m_C;};int main() { Person p(10, 20, 30); cout << "m_A=" << p.m_A << endl << "m_B=" << p.m_B << endl<< "m_C=" << p.m_C << endl ...
【C++】拷贝构造函数的调用时机
使用一个已经创建完成的对象来初始化一个新对象1234void test01(){ Person p1(10);//创建完的对象p1 Person p2(p1);//调用拷贝构造函数}
注意: Person p2=p1;会调用拷贝构造函数,
而Person p2;p2=p1;不会调用拷贝构造函数,为赋值操作
以值传递的方式给函数的参数传值12345678void doWork(Person p){}void test02(){ Person p1;//创建对象 doWork(p1);调用函数,并将对象p1传入}
以值的方式返回局部对象12345678Person doWork02(){ Person p; return p;}void test03(){ Person p1 = doWork02();}
注意: 这种有个专门的优化,当你的函数返回一个自定义类的对象的时候,编译器可以优化掉返回这个过程,可以简单认为这期间只创建了一 ...
【C++】构造函数的分类与调用
分类方式
按参数分: 有参构造(默认构造) & 无参构造
按类型分: 普通构造 & 拷贝构造
调用方式括号法
语法:
1231. 类名 对象名2. 类名 对象名(参数)3. 类名 对象名(引用别名)
示例:
123456int main() { Person p1;//默认构造函数调用 Person p2(10);//有参构造函数 Person p3(p2);//拷贝构造函数 return 0;}
运行结果:
123456Person的无参构造函数Person的有参构造函数Person的拷贝构造函数Person的析构函数Person的析构函数Person的析构函数
注意: 调用默认构造函数时,不要加"()"。因为编译器会认为是函数的声明,不会认为在创建函数
显示法
语法:
1231. 类名 对象名;2. 类名 对象名 = 类名(参数);3. 类名 对象名 = (引用别名);
示例:
123456int main() { Person p1;//默认构造函数调用 Person p2 = ...
【C++】类的构造函数与析构函数
构造函数 & 析构函数说明:完成对象的初始化和清理工作,由编译器强制要求。如果不提供构造和析构函数,编译器会提供,但都是空实现
析构和构造是一对相反的过程,对象被创建时调用构造函数,对象被销毁时调用析构函数
123456789class Person { public: Person() { std::cout << "Person 的构造函数" << std::endl; } ~Person() { std::cout << "Person 的函数" << std::endl; }};
构造函数作用:初始化对象,创建对象时为对象的成员属性赋值,由编译器自动调用,无需手动调用
语法: 类名(参数){函数体}
遵循规则:
函数名必须与类名相同
没有返回值,也不写void
可以有参数,因此可以发生重载
123456class Person ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
**我好帅**