高端网站建设合同,微友说是做网站维护让帮忙投注,哈尔滨网站推广,网站备案要营业执照原件吗目录
一、面向对象的三个核心概念
二、C语言中的I/O口
三、C语言中的数据类型
3.1 逻辑类型
3.2 引用类型
3.2.1 引用作为函数参数
3.2.2 引用作为函数返回值
3.2.3 引用作为类成员
3.3 类类型
四、 C语言中的内联函数
五、 函数重载
六、 带默认形参…目录
一、面向对象的三个核心概念
二、C语言中的I/O口
三、C语言中的数据类型
3.1 逻辑类型
3.2 引用类型
3.2.1 引用作为函数参数
3.2.2 引用作为函数返回值
3.2.3 引用作为类成员
3.3 类类型
四、 C语言中的内联函数
五、 函数重载
六、 带默认形参值的函数
七、 动态内存分配和释放 一、面向对象的三个核心概念
C语言面向对象的三个核心概念是封装、继承和多态。 封装Encapsulation封装是一种将数据和操作封装在类中的机制。通过使用类我们可以将数据和方法绑定在一起并限制外部访问这些数据和方法。这样可以隐藏实现细节提高代码的安全性和可维护性。 继承Inheritance继承是指从一个现有的类派生出一个新的类新的类称为子类或派生类原有的类称为父类或基类。子类可以继承父类的成员变量和成员函数并且可以添加自己的成员变量和成员函数。继承可以实现代码的重用和扩展。 多态Polymorphism多态是指同一个方法在不同的对象上可以有不同的行为表现。在C中多态通过虚函数virtual function和纯虚函数pure virtual function来实现。通过使用多态可以在不修改原有代码的情况下通过派生类对象调用父类的虚函数实现不同的行为。
这三个核心概念共同构成了C面向对象编程的基础可以帮助程序员更好地组织和管理代码提高代码的可重用性和扩展性。 二、C语言中的I/O口
在C语言中可以通过使用I/O流来实现对I/O口的操作。I/O口是计算机与外部设备之间进行输入输出的接口它可以用于与键盘、显示器、硬盘、串口等设备进行通信。
在C语言中符号可以用于两种不同的用途
输入运算符输入运算符用于将数据从输入流例如键盘读取到变量中。通常与cin对象一起使用。
右移运算符右移运算符用于对二进制数进行右移操作。它会将一个数的二进制表示向右移动指定的位数并将结果返回。
在C语言中符号的用途
符号是一个重载运算符用于实现输出流的对象插入操作符。它被用于向输出流中插入数据。输出流对象可以使用符号连接多个数据数据会按照从左到右的顺序插入到输出流中。 在C语言中可以使用iostream头文件提供的iostream库来操作I/O流。iostream库提供了两个基本的I/O流对象即cin和cout。
cin是一个标准输入流对象可以用来接收用户的输入。可以使用操作符来从标准输入流中读取数据。
int num;
cin num; // 从标准输入流中读取一个整数并存储到num变量中cout是一个标准输出流对象可以用来输出数据到屏幕上。可以使用操作符来将数据输出到标准输出流中。
int num 10;
cout The number is: num endl; // 将字符串和变量的值输出到标准输出流中除了cin和cout还有cerr和clog这两个标准错误输出流对象它们用于将错误信息输出到屏幕上。cerr是无缓冲的输出流而clog是有缓冲的输出流它们的使用方式和cout类似。
cerr Error occurred! endl; // 将错误信息输出到标准错误输出流中需要注意的是I/O操作是相对较为慢速的操作因此在进行大量的I/O操作时应尽量减少不必要的输出以提高程序执行效率。 三、C语言中的数据类型
C语言中的数据类型可以分为基本数据类型、构造数据类型和抽象数据类型。 3.1 逻辑类型
逻辑类型logic types指的是能够表示真值true/false的数据类型。C中定义了bool类型来表示逻辑类型其中true代表真false代表假。
逻辑类型主要用于表示条件判断和布尔逻辑运算常用于控制结构的条件表达式中例如if语句和循环语句。逻辑类型可以通过比较运算符例如、!、、等进行比较也可以通过逻辑运算符例如、||、!等进行逻辑运算。 3.2 引用类型
C语言中的引用类型是指使用引用来操作变量的一种数据类型。引用类型是对已存在的变量起一个别名通过引用可以直接操作原变量而不需要通过指针来访问。
C语言中的引用类型有三种主要的用法
3.2.1 引用作为函数参数
引用可以用作函数的参数通过引用传递参数可以直接修改原变量的值而不需要进行复制。这样可以提高程序的效率并且避免了不必要的内存消耗。例如
void swap(int a, int b) {int temp a;a b;b temp;
}int main() {int num1 10;int num2 20;swap(num1, num2);// num1的值现在是20num2的值现在是10return 0;
}3.2.2 引用作为函数返回值
函数可以返回引用类型的值这样可以避免复制大量的数据而直接返回原变量的引用。需要注意的是返回引用时被引用的变量的生命周期必须长于引用的使用否则可能导致引用悬空的问题。例如
int getLarger(int a, int b) {if (a b) {return a;} else {return b;}
}int main() {int num1 10;int num2 20;int larger getLarger(num1, num2);larger 30;// num2的值现在是30return 0;
}3.2.3 引用作为类成员
引用可以作为类的成员变量这样可以在类中直接操作引用所引用的变量而不需要使用指针。需要注意的是成员引用必须在类的构造函数中进行初始化并且一旦初始化后就不能再引用其他变量。例如
class Person {
public:Person(string name) : m_name(name) {}void printName() {cout m_name endl;}private:string m_name;
};int main() {string name John;Person person(name);person.printName(); // 输出 Johnreturn 0;
}3.3 类类型
类的对象是类类型的实例可以使用类名后跟一个对象名称创建对象。通过对象可以访问类的成员变量和成员函数。
类类型的对象可以通过构造函数进行初始化构造函数是一种特殊的成员函数用于在对象创建时初始化对象的状态。 四、 C语言中的内联函数
在C中内联函数是一种编译器优化技术用于在函数调用时直接将函数的代码插入到调用者的代码中而不是通过跳转到函数的地址执行函数体。使用内联函数可以提高程序的执行效率减少函数调用的开销。
C中的内联函数通过在函数定义前面加上关键字inline来声明。例如
inline int add(int a, int b) {return a b;
}在上面的代码中add函数被声明为内联函数。当调用add函数时编译器会将函数体直接插入到调用者的代码中而不是跳转到add函数的地址执行。
C中的内联函数通过在函数定义前加上关键字inline来声明用于提高程序的执行效率。适用于简单、短小的函数通常定义在头文件中。 五、 函数重载
函数重载是指在一个程序中可以有多个同名函数但这些函数的参数类型、参数个数或参数顺序不同。当调用这个函数时编译器会根据参数的类型、个数和顺序来确定具体调用的是哪个函数。函数重载可以提高程序的灵活性和可读性使代码更加简洁和优雅。
在C中函数重载是通过函数的参数列表来实现的。
例如下面是两个同名函数的定义
void print(int num) {cout The number is: num endl;
}void print(string text) {cout The text is: text endl;
}这两个函数都叫做print但参数类型不同第一个函数接受一个int类型的参数第二个函数接受一个string类型的参数。
当调用这个print函数时编译器会根据传入的参数的类型来确定具体调用的是哪个函数。例如
print(10); // 调用print(int num)
print(Hello); // 调用print(string text)这样就可以根据不同的参数类型来选择调用不同的函数实现函数的重载。 六、 带默认形参值的函数
C中可以定义带有默认参数值的函数。默认参数值是指在函数声明或定义时给函数参数赋予一个默认值如果在函数调用时未提供实际参数则会使用默认值。
下面是一个带有默认参数值的函数的例子
void printMessage(string message Hello, World!) {cout message endl;
}在上面的例子中函数printMessage有一个字符串类型的参数message并给它赋予了默认值Hello, World!。
当调用printMessage函数时可以选择提供实际参数来覆盖默认值或者不提供实际参数使用默认值。例如
printMessage(); // 输出: Hello, World!
printMessage(Goodbye!); // 输出: Goodbye!在第一个调用中由于没有提供实际参数所以函数使用了默认值Hello, World!。在第二个调用中提供了实际参数Goodbye!覆盖了默认值。
需要注意的是带有默认参数值的参数必须放在参数列表的末尾不能跳过某个参数给后面的参数赋予默认值。例如
void printNumbers(int a, int b 0, int c) {cout a , b , c endl;
}上面的函数定义是错误的因为默认参数值必须是在参数列表的末尾。应该将参数c放在默认参数值的前面才能正确使用默认参数。 七、 动态内存分配和释放
C中的动态内存分配和释放是通过new和delete关键字来实现的。
使用new关键字可以在堆上分配一块指定类型的内存并返回其地址。我们可以将此地址赋值给一个指针变量以便后续访问和使用。
例如以下代码演示了如何使用new动态分配一个int类型的内存块
int* p new int;上述代码将分配一块int类型的内存并将其地址赋值给指针变量p。 使用delete关键字可以释放之前通过new分配的内存。释放内存后我们就不能再访问被释放的内存块否则会导致未定义行为。
例如以下代码演示了如何使用delete释放之前分配的int类型内存块
delete p;上述代码将释放之前通过new分配的int类型的内存块。
注意
使用new分配的内存必须使用delete进行释放否则会导致内存泄漏。同时释放已经释放过的内存或堆栈上的内存也会导致未定义行为。 另外还可以使用new[]和delete[]关键字来分配和释放一维动态数组的内存。例如
int* arr new int[5];
delete[] arr;上述代码将分配一个包含5个int类型元素的动态数组并在使用完后通过delete[]释放内存。
注意
使用new[]分配的数组内存必须使用delete[]进行释放否则会导致内存泄漏。同样释放已经释放过的内存或堆栈上的内存也会导致未定义行为。