1.命名空间的自定义及使用
- 全局使用及局部使用。
#include <iostream>
using namespace std;
//定义命名空间
namespace name1 {
char *str = (char *) "hello world";
}
namespace name2 {
void show() {
cout << "name2 to show" << endl;
}
}
//全局引入自定义命名空间
using namespace name1;
int main() {
cout << str << endl;
//局部引用命名空间
using namespace name2;
show();
return 0;
}
- 命名空间变量及函数重复的使用方式
#include <iostream>
using namespace std;
//定义命名空间
namespace name1 {
void show() {
cout << "name1 to show" << endl;
}
}
namespace name2 {
void show() {
cout << "name2 to show" << endl;
}
}
//全局引入自定义命名空间
using namespace name1;
using namespace name2;
int main() {
//只能通过命名空间的名称使用
name1::show();
name2::show();
return 0;
}
- 命名空间嵌套
#include <iostream>
using namespace std;
//定义命名空间
namespace name1 {
void show() {
cout << "name1 to show" << endl;
}
namespace name2 {
namespace name3 {
void show() {
cout << "name3 to show" << endl;
}
}
}
}
int main() {
//只能通过命名空间的名称使用
name1::show();
name1::name2::name3::show();
return 0;
}
2.构造函数详解
- 构造函数 跟java一样的
//参数赋值两种写法 1this->name=name; 2 name(name);
// :name(name) 等价 this->name = name;
/*Student(char * name) :name(name) {
cout << "一个参数的构造函数" << endl;
}*/
Student::Student() {
cout << "无参构造函数" << endl;
}
Student::Student(char *name) : Student(name, 121) {
this->name = name;
cout << "一个参数构造函数" << endl;
}
Student::Student(char *name, int age) {
this->name = name;
this->age = age;
cout << "两个参数构造函数" << endl;
}
- 在栈区开辟
int main() {
//Student stu; 默认调用空参数构造函数
Student stu1;
cout << "---------" << endl;
// 构造函数继承 先调用父构造 再调用子构造
Student stu3("刘老汉");
cout << "---------" << endl;
Student stu4("大眼怪", 99);
return 0;
}
输出:
无参构造函数
---------
两个参数构造函数
一个参数构造函数
---------
两个参数构造函数
- 使用new Student 在堆区开辟 需要delete
int main() {
Student *stu1 = new Student("二哈");
cout << stu1->getName() << " " << stu1->getAge() << endl;
delete stu1;
stu1 = NULL;
//Student student = new Student(); //直接编译报错
return 0;
3.析构函数
- 析构函数定义 对象被回收的时候调用的析构函数
public:
Student();
Student(char *);
Student(char *, int);
~Student();//析构函数申明
};
// 析构函数实现
Student::~Student() {
cout << "析构函数" << endl;
}
int main() {
Student *stu1 = new Student("二哈");
cout << stu1->getName() << " " << stu1->getAge() << endl;
delete stu1;
stu1 = NULL;
return 0;
}
输出:
两个参数构造函数
一个参数构造函数
二哈 121
析构函数
- 析构函数作用
在析构函数中释放 动态开辟的成员变量空间
4.new delete
- new /delete 会调用构造函数 与析构函数 (C++范畴)
- malloc / free 不会调用构造函数与析构函数 (C的范畴)
5.拷贝构造函数
- 对象 = 赋值。会调用拷贝构造函数
int main() {
Student *student = new Student();
notify(*student);
delete student;
student = NULL;
return 0;
}
输出:
无参构造函数
拷贝构造函数
析构函数
析构函数
- 拷贝构造函数重写
Student::Student(const Student &student) {
cout << "拷贝构造函数" << endl;
}
6 指针常量 常量指针 常量指针常量
int num=9;
int num2=8;
- 常量指针 不允许直接修改值 可以修改指针
const int * p=#
- 指针常量 允许直接修改值 不可以修改指针
int * const numP=&num
- 常量指针常量 指针和值都不允许修改
const int* const numP=#
网友评论