C++ 笔记(一)

本文探讨了C++与C语言的区别,包括面向对象特性、命名空间使用、常量类型、函数重载、堆栈对象管理、拷贝构造函数及指针特性等内容。
1、C++语言面向对象 + 标准特性;C语言面向过程,函数+结构体;C++里面可以运行C语言,可以调用C语言,反之 就不行C语言无法运行C++。
2.命名空间的定义与使用

作用:用于区分调用目标,当有多个重复名称的函数或变量,可用命名空间区分。
定义:

 namespace AA{
   void add(){}
};

namespace BB{
   void add(){}
};

使用:

AA::add();
BB::add();
或
using namespace AA;
add();
using namespace BB;
add();
3.C语言的常量,其实是个假常量,C++的常量是真常量
int main3() {
    const int number = 100;

    // number = 200;

    int * numP = &number;

    *numP = 10000;

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

    return 0;
}
//最终输出10000,虽然定义了常量,但允许内存值被修改
int main4() {
    const int number = 100;

    // number = 200;

    // 我的编译器,编译不通过, 有的编译器,编译通过,但是运行报错(结论:就不能改)
    // int * numP = &number;

    // *numP = 10000;

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

    return 0;
    
}
//假如按第一段代码写法,编译不通过或运行报错
typedef struct {
    char name[20];
    int age;
}Student;

void insertStudent(const Student & student) {
    // 当student是常量是无法编译
     strcpy(student.name, "李元霸"); 

     Student student2 = {"刘奋", 43};
     // 当student是常量是无法编译
     student = student2;

}
//常量引用不允许修改
4、C语言不支持函数重载,C++支持且重载规则与java一致
int add(int number1) 
    return number1;


int add(int number1, int number2) {
    return number1 + number2;
}


int add(int number1, int number2, int number3) {
    return number1 + number2 + number3;
}

int add(double n1 = 100, int n2 = 200, int n3 = 300, int n4 = 400, bool isOK = 0) {
    return 0;
}
5.C++堆空间与栈空间对象
int main
{
	// 栈区开辟空间的变量,当离开作用域自动释放内存
 	Student student1; 

    // 赋值
    student1.setAge(99);
    student1.setName("李");

	//堆空间创建的对象,需要显式delete才能释放内存,且delete后指针指向原来空间,需要手动指向NULL的地址
    Student * student2 = new Student(); // new/delete
    // 赋值
    student2->setAge(88);
    student2->setName("霸");

    if (student2)
        delete student2; // 必须手动释放堆空间的对象student2
        student2 = NULL; // 指向NULL的地址区域
}
6.拷贝构造函数只在函数声明时调用
Student stu1("李鬼", 34);
Student stu2;
// 这样赋值是不会调用 自定义拷贝构造函数,但是会调用默认赋值
stu2 = stu1; 
//拷贝函数调用
Student stu2 = stu1;
7.常量指针、指针常量、常量指针常量

常量指针:

int number = 9;
const int * numberP1 = &number;
*numberP1 = 100; // 报错,不允许去修改【常量指针】存放地址所对应的值
numberP1 = &number2; // OK,允许重新指向【常量指针】存放的地址

指针常量:

int* const numberP2 = &number;
*numberP2 = 100; // OK,允许去修改【指针常量】存放地址所对应的值
numberP2 = &number2; // 报错,不允许重新指向【指针常量】存放的地址

常量指针常量

 const int * const numberP3 = &number;
 *numberP3 = 100; // 报错,不允许去修改【常量指针常量】存放地址所对应的值
 numberP3 = &number2; // 报错,不允许重新指向【常量指针常量】存放的地址
8.C++中实现Java类似的匿名内部类
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值