C++学习(一)

C++和C的常量区别
 1 //C的常量是伪常量,C++的常量是真常量
 2 //const修饰的是指不可变的常量
 3 //在C中:
 4 int main(){
 5     const int number = 100;
 6     int * numP = &number;
 7     *nump = 10000;7
 8     //此时 number已被改为10000
 9     return 0;
10 }
11 在c++中可以运行c的代码,但是会出现编译通过,运行失败的问题。
12 //在C++中:
13 const修饰的常量不可以被修改,应去掉const修饰词
c++的打印
c++可以运行c的代码,反之,c不能加载C++的代码
//C++的日志输出, <<并不是运算符,只是操作符重载, endl相当于c中的 \n;
 //以下语句相当于  printf("c++学习 \n");
 cout << "c++学习" << endl;
 
指针引用:&
  • 不采用&,这连个函数的地址不同
  • 采用&后,引用的同个内存地址
int number = 100;
int & num2 = number;
//num2 和 number 指针指向同个地址。一旦该地址值改变,所有的指针都获取同个值
 num2 = 99
#include <iostream>
using namespace std;

void numChange(int * num1,int * num2){
    int temp = 0;
    temp = *num1;
    *num1 = *num2;
    *num2 = temp;
}

int main(){
    int a = 666;
    int b = 888;
    numChange(&a,&b);
    cout << "a:"<< a << ", b: " << b << endl;
    return 0;
    }
 //log: a:888, b: 666
typedef
可以使用 typedef 为一个已有的类型取一个新的名字
typedef type newname;
静态转换static_cast
注意:静态转换不进行任何运行时类型检查,因此可能会导致运行时错误
int i = 10;
float f = static_cast<float>(i); // 静态将int类型转换为float类型
常量引用
#include <iostream>
#include <cstring>

using namespace std;
//保证代码的统一性
typedef struct{
    char name[20];
    int age;
}Student;

//此时若为s,则打印为 "王大斌",s和传入的student不是同一地址
//若为&s,则打印为 "隔壁老王"
//若为const Student,则报错,const修饰的变量只读,不可更改
void insertStudent(Student &s){
    //此时s是只读的,不可改变
    strcpy(s.name,"隔壁老王");
}

int main(){
    Student student = {"王大斌",32};
    insertStudent(student);
    cout <<"student  name: "<< student.name <<endl;
    return 0;
}
函数重载
void add(int num1,int num2){}

//c语言中不支持函数重载,c++才支持函数重载
void add(int num1,int num2, int num3){}
//默认形参写法,kt是借鉴于c++
void add( int num1,int num4 = 0){
    
}
注意:调用时会优先寻找带有默认参数的方法执行,跟函数顺序无关
 
先定义参数类型先抽象出来(无形参数),后边再补充逻辑
#include <iostream>
using namespace std;

void JNIMethod(int,double,char ){
    cout << "先定义好,后边再升级" ;
}

int main()
{
   cout << "Hello World" << endl;
    JNIMethod(1,0.1,'1');
   return 0;
}
 1 //Student.h只写声明,不写实现;类似java的接口
 2 #include <iostream>
 3 using namespage std;
 4 
 5 class Student {
 6 private://从这里之下的代码(成员和函数)都是私有的
 7     int age;
 8     char* sex;
 9 public://从这里之下的代码(成员和函数)都是公有的
10     void  setAge(int age);
11     void  setSex(char *sex);
12     int getAge();
13 }
14 
15 //Student.cpp  写实现
16 #include "Student.h"
17 
18 void Student::setAge(int age){
19     this -> age = age;
20 }
21 。。。。。。
22 
23 //使用
24 #include "Student.h"
25 int main(){
26     //打印
27     std::cout << age << std::endl;
28     ===============栈内开辟空间====================================
29     Student studetnStack;
30     studetnStack.setAge(1);
31     cout << age << sex << endl;
32     
33      ===============栈内开辟空间====================================
34      
35      Student * studentdump = new Student();
36      studentdump.setAge(88);
37      //注意 new 和 delete对应。
38      
39      delete studentdump;//表示销毁堆内分配的对象,必须执行此操作,否则会堆内存溢出。
40      studentdump = NULL;
41 }

 

构造函数和析构函数
构造函数:注意malloc时不会执行构造函数,所以请使用new创建对象
析构函数:~XX(),波浪线
 
 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class Student{
 6 
 7 
 8 private:
 9    int age;
10    char* sex;
11 
12 public:
13     void setAge(int age);
14     void setSex(char * sex);
15     int getAge();
16     char* getSex();
17     Student(){
18         cout<< "我是默认无参构造函数" << endl;
19     }
20     Student(int age): Student(age,''){
21         cout<< "我是一个参构造函数, age: "<< age << endl;
22     }
23 
24     Student(int age, char* sex){
25         cout<< "我是两个参构造函数, age: "<< age << "  , sex: "<< sex << endl;
26         this->age = age;
27         this->sex = sex;
28     }
29         //此代码等同上边代码,简写方法
30       //    Student(int age,char* sex) : sex(sex),age(age) {}
31     //当delete时,析构函数一定会执行
32     ~Student(){
33         //可以执行释放工作
34     }
35 };
36 //注意,在java中,可以通过finalize(),java调用次函数,有可能会被回收,打上被回收的标记,放入队列中,并不是一定会被回收了

 

 

 

 

 

 

posted on 2023-06-15 18:27  斌仔16  阅读(18)  评论(0)    收藏  举报