C++之面对对象

C和C++有何区别

// C语言是对面对过程 函数+结构体
// C++ 语言面对对象 + 标准特性
// C++ 里面可以运行C语言,反之,则不行。
#include <stdio.h> //C语言的标准支持
#include <iostream> // C++标准支持
usingnamespace std; // 命名控件 c++ 的特性(java语言的内部类 )


int mian(){
	// std::cout << "c++语言的学习" << std::endl;
	cout << "c++语言的学习" << std::endl; //省略了std::
	// endl == \n 等价与C的换行含义一样
	// << 不是属性的运算,操作符重载
	cout << "a\n" 
		 << "b\n"
		 << "c\n"
		 << "d\n";
	retrun 0;
}

C和C++之常量

int main(){
	// C语言的常量其实是个假常量
	const int number = 100;
	// number = 200; 不能修改
	int * numP = &number;//拿指针
	*numP = 10000;//修改指针所对应的值
	printf("%d\n",number);
	
	// 在C++里面 加了const 之后
	// int * numP = &number;//拿指针 会报错,是真常量
	

	return 0;
}

引用的原理与常量引用


// C的典型操作:指针取地址  互换
void numberChange(int * number1, int * number2){
	int temp = 0;
	temp = *number1;
	*number1 = *number2;
	*number2 = temp;
}

// C++ 提倡的引用 &
void numberChange2(int & number1, int & number2){
	//这里了解C的话还是很好理解,使用了&引用之后指针地址跟main里的指针地址是一样的
	// 如果是单纯把变量number1传递过来,实际上当前函数是重新创建了一个
	// 同名number1来接收的,内存地址就不一样了。
	int temp = 0;
	temp = number1;
	number1 = number2;
	number2 = temp;
}

int main(){
	// 两个数互换
	int number1 = 10;
	int number2 = 20;
	numberChange(&number1,&number2);
	cout << "n1:" << number1 << "n2:" << number2 >>endl;
	
	numberChange2(number1,number2);
	cout << "n1:" << number1 << "n2:" << number2 >>endl;
	
	// 引用实验,来学原理;
	//第一种
	int n1 = 999;
	int n2 = n1;
	//两个内存地址不一样,内存地址不一样,值一样,这里的复制是值的复制。
	cout << &n1 << &n2 << endl;
	
	//第二种
	int n1 = 999;
	int &n2 = n1;
	//两个内存地址一样,实际上先有了n1,再来个n2,可以理解为给n1再取个别名,
	//还是只有一个指针,只有一个内存,只有一个值。
	cout << &n1 << &n2 << endl;
	n2 = 777;
	cout << n1 << n2 << endl;//n1和n2都等于777

	return 0;
}

常量引用

#include <iostream>
using namespace std;
//代码的统一性
typedef struct{
	char name[20];
	int age;
}Student;

//插入数据库,Student的信息插入数据库
void inserStudent(Student student){
	//内鬼,修改了
	//strcpy(student,name,"李元霸");
}

//插入数据库,Student的信息插入数据库,常量引用
void inserStudent(const Student & student){
	//不能那样修改了
	cout << student.name << "," << student.age << endl;
}


int main(){
	// 用户提交的Student 数据
	Student student = {"张无忌", 30};
	insertStudent(student);
	return 0;
}

函数重载

C语言不支持重载

#include <stdio.h>

void add (int number1, int numnber2){
}
//error: conflicting types for 'add' 已有函数主体
//你在C里面搞了重载是不允许的
void add(int number1, int number2, int number3){
}

C++默认支持重载 == java 重载

#include <iostream>
using namespace std;

//int add(int number1, int number2) = number1 + number2;// 这个是KT写法
int add (int n1, int n2) {
	return n1 + n2;
}
// 跟java的重载一样
int add(int n1, int n2, int n3){
	return n1 + n2 + n3;
}
// 默认形参 跟KT一样,函数重载有默认形参的时候,调用默认是指向有默认形参的函数
int add(int n1 = 100, bool isOk = 0) {}

// 调用的时候必须传递char * 之外还必须传递一个int类型,你可以认为是预留参数
void uploadLogToEngine(char * logText, int){}

C++面对对象

#include <iostream>
using namespace std;
// Student.h 头文件 只写声明,不写实现
class Student{
	private : // 下面的代码都是私有(成员和函数)
	char * name;
	int age;
	public: // 下面的代码都是公开(成员和函数)
	// set get
	void setAge(int age);//声明函数
	void setName(char * name);
	void getAge();
	char * getName();
};
#include "Student.h"
// 根据Student.h 头文件 写实现 Student.cpp

void Student::setAge(int age){
	// -> 调用一级指针,C++对象指向的是一个指针
	this->age = age;
}
void Student::setName(char * name){
	this->name = name;
}
void Student::getAge(){
	return this->age;
}
void Student::getAge(){
	retrun this->name;
}

#include <iostream>
using namespace std;

int mian(){
	// 规范写法:要有头文件.h .hpp -- 实现文件.c cpp
	Student student1; //栈区开辟的空间
	student1.setAge(99);
	student1.setName("李连杰");
	cout << "name:" << student1.getName() << ",age:" << student1.getAge() << endl;
	//
	Student * student2 = new Student(); //堆区开辟的空间
	student2->setAge(99);
	student2->setName("李连杰");
	cout << "name:" << student2->getName() << ",age:" << student2->getAge() << endl;
	
	delete Student2;//必须手动释放堆空间的对象
	student2 = NULL;
	return 0;
	//正规的流程:XXX.so (c/cpp的实现代码)这是加密的,头文件是公开的 
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值