c++考试

这篇博客详细介绍了C++的基础知识和核心概念,包括常量定义、三目运算符、数组初始化、指针、引用、内存分区、new运算、类、构造函数、析构函数、深拷贝与浅拷贝、模板等。还涵盖了类模板的使用、成员函数的类外实现、继承权限、运算符重载等高级主题。
摘要由CSDN通过智能技术生成

C++测试题

一、基础入门

1.常量定义的方式:
#define day 7
const int day 7
2.三目运算符
c = a > b ? a : b;

3. switch
	switch(score)
	{
   
        case 1:
        case 2:
        default:
	}

4. 数组初始化
	int arr[10] = {
   123};     // 数组初始化
	sizeof(arr)/sizeof(arr[0]); // 计算数组大小
	int arr[][2]={
   
        {
   1,2},
        {
   3,4}
    }; // 二维数组初始化

5. 函数值传递、地址传递
void swap(int num1, int num2){
   }
swap(a,b);   //值传递,不改变原值
void swap(int *p1,int *p2){
   }
swap(&a,&b); //地址传递,改变原值
void swap(int &num1,int num2){
   }
swap(a,b);   //引用传递,改变原值
void swap(const int &num1,const int &num2){
   }
swap(a,b);   //常量引用 防止改变原值


6. 函数分文件编写
  • 创建头文件.h,写入函数声明
  • 创建源文件.cpp,写入函数定义
//头文件swap.h
#include<iostream>
using namespace std;
void swap(int a,int b);
//源文件swap.cpp
#include "swap.h"
void swap(int a,int b){
   
    int temp = a;
    a = b;
    b = temp;
    cout << a << " " << b;
}
//main函数文件
#include "swap.h"
int main(){
   
    int a=100,b=100;
    swap(a,b);
}指针

7. 指针
int *p = &a;
cout << *p;

8.常量指针和指针常量
const int *p = &a;  // 常量指针,值不可改
int * const p = &a; // 指针常量,地址不可改  

9.指针和数组
//一维
int arr [] = {
   1,2,3};
int *p = arr;
for(int i=0;i<10;i++){
   
    cout << *p; << endl;
    p++;
}
//二维:二维数组名是一个数组指针
int arr[][2] = {
    {
   1,2},{
   3,4},{
   5,6} };
int *p1 = arr[0]; // 指向a[0][1],p1++改变列
int (*p2)[2] = arr; // p2指向数组的指针,p2++改变行.
cout << *(*(p2+row)+col); // 指向a[row][col],
int *p2[2]; // 指针数组:每个元素是指针


10. 结构体
struct student{
   
    string name;
    int age;
}
student stu1 = {
   'AMY',15};
cout << stu1.name;
student stuarr[3] = {
   {
   'AMY',15},{
   'BOB',26},{
   'CAT',37}};
student *pstu = &stu1;
cout << pstu->age;

二、C++核心编程

1.内存分区
  • 代码区(函数体二进制代码)--------------编译后未执行前时存在,共享、只读
  • 全局区(全局变量、静态变量、常量)-----编译后未执行前存在
  • 栈区(形参、局部变量)-------------------程序运行后存在,不要返回局部变量的地址
  • 堆区(程序员分配)

2.new
int *a = new int(10);
delete a;
int *arr = new int[10];
delete[] arr;

3.引用本质:指针常量
int a = 10;
int b = 20;
//引用必须初始化且之后不可改变
int &c = a; // 本质: int * const c = &a; 指针指向不可修改
c = b;      // 赋值操作,本质  *c = b;

4. 引用做函数返回值
int& test01() {
   
	int a = 10; 
	return a;  
}
int& ref = test01(); //NO!不要返回局部变量引用,会被释放

int& test02() {
   
	static int a = 20; 
	return a;
}
int& ref = test02(); //Yes!可以返回静态变量引用(全局区)

//函数返回的是a的引用,所以可以赋值
test02() = 1000//函数调用作为左值

5. 函数默认参数
int func2(int a = 10, int b = 10);
//NO!声明和实现中只能一个有默认参数
int func2(int a = 10, int b = 20) {
    
	return a + b;
}

6. 函数重载

函数重载满足条件:

  • 同一个作用域下
  • 函数名称相同
  • 函数参数类型不同 或者 个数不同 或者 顺序不同

注意: 函数的返回值不可以作为函数重载的条件

void func(int a);                     //func(10);调用前一个
void func(int &a);  // 是重载,但二义性    func(a);报错

void func(int a);
void func(const int a); // 不是重载

void func(int &a);  //              func(d); 传变量
void func(const int &a); // 是重载   func(10); 传常量

void func(int a);
void func2(int a, int b = 10);//是重载,但二义性

7. 文件操作
void test01() {
   
	ofstream ofs;  // 写文件
	ofs.open("1.txt", ios::out);
	ofs << "aaaaaaaaaa"<<endl;
	ofs << "bbbbbbbbbb" << endl
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值