C++学习笔记(一)

学习背景,大一的时候学过c++,但是后面基本没用过了,一直写得是c++,最近在实习用的是c++,所以需要重新开始学。

最简单的helloworld
#include <iostream>
using namespace std;
int main()
{
    cout << "Hello, world!" << endl;
    return 0;
}
C++简介

C++ 和Java一样完全支持面向对象的程序设计,包括面向对象开发的四大特性:封装,抽象,继承,多态

c++跟java最简单的不同就是,c++需要先编译链接后生成二进制文件,然后才能运行,
相应的,因为java有虚拟机的存在,一般都是直接运行,一边编译一边运行

c++对应的编译器常见的gcc,g++等。

所以我们创建一个helloworld.cpp文件输入helloworld的代码的话,我们要把这个程序运行起来需要进行以下步骤

$ g++ hello.cpp  // 会输出一个编译文件
$ ./a.out        //执行程序
Hello World
C++的类型
1.基本类型

c++中有七种基本类型int, float, double, char, bool, void, wchar_t
与java不同的是,没有了long,short类型,多了wchar_t宽字符类型,因为char表示的范围为8位字符类型,但是除了英文外其他语言的类型不止256种,那么这个时候char就不够表示了,这个时候就可以用wchar_t表示

除此之外,一些基本类型,比如int,float,double可以用

一些基本类型可以使用一个或多个类型修饰符进行修饰:signed,unsigned,short,long修饰,类型java中的long其实在c++中就是用long int表示,short就是用short int表示

2.typedef

可以用typedef给已有的类型取一个其他的名字,比如我们觉得int不好,我们改一个Integer

typedef int Integer
3.枚举类型
#include<iostream>
using namespace std;
enum color{
    green,
    blue,
    red
};
int main(){
    cout << "hello world!" <<endl;

    color c = green;
    cout << c  << endl;  // 0
    return 0; 
}

枚举类型的默认值是从0开始的,后面依次加1

4.全局变量和局部变量

在c++中局部变量会覆盖掉全局变量(如果名称一样的话)

除此之外不同的是,在局部变量中如果未初始化变量的话,那么变量就为空,如果是全局变量的话系统会给变量赋默认值,比如int给0的赋值

5.常量类型

85 // 十进制
0213 // 八进制
0x4b // 十六进制
30 // 整数
30u // 无符号整数
30l // 长整数
30ul // 无符号长整数

string greeting = "hello, runoob"; //字符串常量

// define预处理,可以预先赋值给一些名称一定的值,作为全局常量
#define LENGTH 10   
#define WIDTH  5
#define NEWLINE '\n'

const int LENGTH = 10;  //跟java的const差不多
6.存储类

auto存储类:类似常用的var类型,可以自动判定变量的类型

auto f = 3.14  //double

register存储类 :用于定义存储在寄存器中而不是RAM的局部变量,这意味着最大尺寸等于寄存器的大小(通常是一个词)

static存储类:跟java的static差不多,如果一个类中有static定义的变量,那么所有实例都会对该变量进行共享

extern存储类:当前文件内的全局变量用extern修饰的话别的文件也可以访问

mutable,thread_local存储类

C++的基本语法

c++的循环,if判断,函数组成基本和Java一致

数组的申明:
double test[5];
// init
double test1[2] = {1.0, 2.0};
C++中的指针

Java中是没有指针的,因为所有的引用都是指针,如果要值传递需要使用深拷贝。

而c++中有指针就可以区分值传递和引用。

int var = 20;
int *ip;
ip = &var; //获取var的地址传给ip指针

cout << ip <<endl; // 输出地址
cout << *ip <<endl;// 输出取值

在C++中与指针相似的还有一个引用
他和指针的功能基本相同,有三个不同的地方:
1.不存在空引用,指针可以为空
2.引用初始化的时候一定要赋值,而指针可以不用
3.引用赋值之后就不可改变,指针可以

int i;
double d;
int& r = i;
double& s = d;
C++的输入输出
   char name[50];
 
   cout << "请输入您的名称: ";
   cin >> name;
   cout << "您的名称是: " << name << endl;
C++的结构体
C++的面向对象
C++的类和结构体

c++中有跟java一样的类class,一般Java中一个文件就是一个类,但是c++不一定,
我们可以创建一个main.cpp文件放入以下代码,我们可以简单的看出C++中的类与Java的区别

class Boy{
	public:
		string name;
		int age;
		// 成员函数
		// 可以在类内部进行实现
		string getSalary(){return salary};
		// 也可以放在外部一起实现
		void setSalary(double sal);
		
	private:
		double salary;
}
class Girl{
	public:
		string name;
		int age;
		// 成员函数
		// 可以在类内部进行实现
		string getSalary(){return salary};
		// 也可以放在外部一起实现
		void setSalary(double sal);
		
	private:
		double salary;
}
double Boy::setSalary(double salary){
	this->salary = salary;
}
double Girl::setSalary(double sal){
	salary = sal;
}
int main(){
	return 0;
}

与类相同的还有结构体struct,简化版的类

typedef struct Books
{
   string  title;
   string  author;
   string  subject;
   int   book_id;
}Books;

Books book;
books.title = "boo1";
cout << books.title << endl;
C++类的继承
// 基类
class Animal {
    // eat() 函数
    // sleep() 函数
};
//派生类 
class Dog : public Animal {
    // bark() 函数
};

public表示继承的类型,这个类型表示了基类的成员在派生类中的相应的修饰符:
公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。

保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。

私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。

与java不同的是,在C++中可以继承多个父类

class A: public B, public C{}
C++中的函数重载和多态

在同一个作用域内,可以申明几个功能类似的同名函数,但这些同名函数的传参必须不同,一般指参数的个数,类型或者顺序。
这个与Java类似。

class printData
{
   public:
      void print(int i) {
        cout << "整数为: " << i << endl;
      }
 
      void print(double  f) {
        cout << "浮点数为: " << f << endl;
      }
 
      void print(char c[]) {
        cout << "字符串为: " << c << endl;
      }
};

多态其实跟函数覆写类似,就是在类的继承关系基础上,对父类的一些函数进行覆写

class A{
	public:
		// 只有虚函数才能被覆写
		virtual void print(){
			cout << "A" << endl;
		}
}
class B: public A{
	public:
		void print(){
			cout << "B" << endl;
		}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值