C++语言12+22 32 n2<1000,C++语言学习

一、C和C++的区别

// #include // C语言的标准支持

#include // C++标准支持 C++的与众不同

using namespace std; // 命名空间 C++ 的特性 (Java语言的内部类)

int main() {

// C++语言面向对象 + 标准特性

// C语言面向过程,函数+结构体

// C++里面可以运行C语言,可以调用C语言,反之 就不行C语言无法运行C++

printf("降龙十八掌(C版)\n");

// std::cout << "C++语言的学习" << std::endl;

cout << "C++语言的学习" << endl; // 因为你前面引入了命名空间,省略std::

// endl == \n 都是换行的含义一样

// << 操作符重载,后面会讲

cout << "擒龙功" << endl;

cout << "铁头功\n"

<< "金刚腿\n"

<< "铁布衫\n";

return 0;

}

#include

// C语言的常量,其实是个 假常量,可以使用指针修改

int main() {

const int number = 100;

// number = 200;

int * numP = &number;

*numP = 10000;

printf("%d\n", number);

return 0;

}

======================

#include

// C++语言的常量,其实是真常量,不能修改

int main() {

const int number = 100;

// number = 200;

// 我的编译器,编译不通过, 有的编译器,编译通过,但是运行报错(结论:就不能改)

// int * numP = &number;

// *numP = 10000;

printf("%d\n", number);

return 0;

}

二、引用

#include

using namespace std;

// 互换两个数

// 指针取地址 互换 C语言第一节课的内容

// 接收number1/number2的地址,取改地址的值,来完成的互换

void numberChange(int * number1, int * number2) {

int temp = 0;

temp = *number1;

*number1 = *number2;

*number2 = temp;

}

// C++提倡的引用

void numberChange2(int & number1, int & number2) {

// 如果不采用引用,main numberChange2 内存地址是不一样的

// 如果采用引用,main numberChange2 内存地址是一样的,为什么呢?

cout << "numberChange2 " << "n1地址:" << &number1 << " , n2地址:" << &number2 <

int temp = 0;

temp = number1;

number1 = number2;

number2 = temp;

}

int main() {

int number1 = 10;

int number2 = 20;

cout << "main " << "n1地址:" << &number1 << " , n2地址:" << &number2 <

// numberChange(&number1, &number2);

numberChange2(number1, number2);

cout << "n1:" << number1 << " , n2:" << number2 << endl;

cout << endl;

// 引用做实验,来学原理:

// 第一部分,不采用 &, 值传递,内存地址不一样,如图引用01

/*int n1 = 999;

int n2 = n1;

cout << &n1 << "---" << &n2 << endl;*/ // 0xffffcbb4---0xffffcbb0

// 第二部分,采用&,再取一个名字,指向的是同一个地址,如图引用02

int n1 = 999;

int & n2 = n1;

int & n9 = n1;

n2 = 777;

n9 = 9527;

cout << "地址:" << &n1 << "---" << &n2 << endl;

cout << "值:" << n1 << "---" << n2 << endl; //9527

return 0;

}

9d25ba113880

引用01.png

9d25ba113880

引用02.png

三、常量引用

#include

#include

using namespace std;

// 代码的统一性

typedef struct {

char name[20];

int age;

}Student;

// 常量引用:Student不准你改 == const Student &

// 插入数据库,Student的信息给插入数据库

void insertStudent(const Student & student) {

// strcpy(student.name, "李元霸"); 不能这样修改

Student student2 = {"刘奋", 43};

// student = student2; 不能这样修改

// 只读的了,可以安心插入数据库了

cout << student.name << "," << student.age << endl;

}

int main() {

// 用户提交的Student数据

Student student = {"张无忌", 30};

insertStudent(student);

return 0;

}

四、面向对象

//Student.h

#include

using namespace std;

// Student.h 头文件 只写声明,不写实现

class Student {

private:

char *name;

int age;

public:

void setName(char *name);

void setAge(int age);

char *getName();

int getAge();

};

//Student.cpp

#include "Student.h"

// 根据头文件 ,写实现

// 和实现头文件那个函数,没有任何关系,相当于另外一个函数

/*void setAge(int age) {

}*/

//头文件的实现函数

void Student::setName(char *name) {

// C++对象指向的是一个指针

// -> 调用一级指针的成员

this->name = name;

}

void Student::setAge(int age) {

this->age = age;

}

char *Student::getName() {

return this->name;

}

int Student::getAge() {

return this->age;

}

//main.cpp

#include "Student.h"

int main() {

//栈空间

Student student;

student.setName("张无忌");

student.setAge(22);

cout << "name:" << student.getName() << ",age:" << student.getAge() << endl;

//堆空间

Student * student1 = new Student();

student1->setName("杨过");

student1->setAge(22);

cout << "name:" << student1->getName() << ",age:" << student1->getAge() << endl;

//堆空间手动释放

if (student1){

delete student1;

student1 = NULL;

}

return 0;

}

五、命名空间

#include

// 声明std,我们的main函数就可以直接使用里面的成员,不需要使用 std::

using namespace std; // C++自己的命名空间 (C# .net 命名空间)

// 自定义命名空间

namespace derry1 {

int age = 33;

char * name = "Derry猛男1";

void show() {

cout << "name:" << name << ", age:" << age << endl;

}

void action() {

cout << "derry1 action" << endl;

}

}

// TODO ------ 命名空间里面重复的函数

// 自定义命名空间

namespace derry2 {

void action() {

cout << "derry2 action" << endl;

}

}

// TODO ------ 小概率会遇到的情况,命名空间的嵌套

// 自定义命名空间

namespace derry3 {

namespace derry3Inner {

namespace derry3Inner1 {

namespace derry3Inner2 {

namespace derry3Inner3 {

void out() {

cout << "爱恨情仇人消瘦,悲欢起落人寂寞" << endl;

}

}

}

}

}

}

// 声明 命名空间 全局使用

// using namespace derry1;

int main() {

cout << "命名空间" << endl;

// 声明写的 命名空间 局部使用

using namespace derry1;

int ageValue = derry1::age; // 方式1 使用 刚刚声明的命名空间

derry1::show(); // 使用 刚刚声明的命名空间

ageValue = age; // 方式2 直接去引出来 ::

show(); // 直接去引出来 ::

// TODO ------ 命名空间里面重复的函数

using namespace derry2;

// action(); 重复加::

derry1::action();

derry2::action();

// TODO ------ 小概率会遇到的情况,命名空间的嵌套

// 第一种方式 先声明命名空间 再使用

using namespace derry3::derry3Inner::derry3Inner1::derry3Inner2::derry3Inner3;

// 再使用

out();

// 第二种方式 直接使用

derry3::derry3Inner::derry3Inner1::derry3Inner2::derry3Inner3::out();

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值