java動(dòng)態(tài)web網(wǎng)站開發(fā)軟文營(yíng)銷案例分析
前言
大家好吖,歡迎來(lái)到 YY 滴C++復(fù)習(xí)系列 ,熱烈歡迎! 本章主要內(nèi)容面向接觸過(guò)C++的老鐵
主要內(nèi)容含:
歡迎訂閱 YY滴C++專欄!更多干貨持續(xù)更新!以下是傳送門!
- YY的《C++》專欄
- YY的《C++11》專欄
- YY的《Linux》專欄
- YY的《數(shù)據(jù)結(jié)構(gòu)》專欄
- YY的《C語(yǔ)言基礎(chǔ)》專欄
- YY的《初學(xué)者易錯(cuò)點(diǎn)》專欄
- YY的《小小知識(shí)點(diǎn)》專欄
- 更加詳細(xì)和全面的C++知識(shí)講解——>可關(guān)注 YY的《C++》專欄
- 此系列主打期末復(fù)習(xí)速過(guò),一些基本知識(shí)點(diǎn)會(huì)略過(guò)(例如虛函數(shù)具體原理等等)
目錄
- 一、簡(jiǎn)述題
- 1. 簡(jiǎn)述構(gòu)造函數(shù)和析構(gòu)函數(shù)分別有什么作用?
- 2. 公有成員和私有成員的區(qū)別是什么?
- 3. 什么是拷貝構(gòu)造函數(shù)?它何時(shí)被調(diào)用?
- 二、代碼題
- 例題1:
- 例題2:
- 例題3:
- 例題4:
- 例題5:
- 例題6:
- 例題7:
一、簡(jiǎn)述題
1. 簡(jiǎn)述構(gòu)造函數(shù)和析構(gòu)函數(shù)分別有什么作用?
構(gòu)造函數(shù)用于在創(chuàng)建對(duì)象時(shí)初始化對(duì)象的數(shù)據(jù)成員,為對(duì)象分配內(nèi)存空間,并執(zhí)行其他必要的初始化操作。它通常用于初始化對(duì)象的狀態(tài),設(shè)置初始值,分配資源等。
析構(gòu)函數(shù)用于在對(duì)象被銷毀時(shí)執(zhí)行一些清理工作,比如釋放對(duì)象占用的資源,關(guān)閉文件,斷開連接等。它通常用于在對(duì)象生命周期結(jié)束時(shí)執(zhí)行一些必要的清理操作,以確保對(duì)象的資源得到正確釋放。
2. 公有成員和私有成員的區(qū)別是什么?
公有成員和私有成員是面向?qū)ο缶幊讨械膬煞N訪問(wèn)控制權(quán)限。
公有成員是指在類的外部和派生類中都可以被訪問(wèn)的成員。這意味著任何地方都可以訪問(wèn)和修改公有成員。公有成員通常用于提供接口和功能,以便外部代碼可以與類進(jìn)行交互。
私有成員是指只能在類的內(nèi)部訪問(wèn)的成員,外部代碼無(wú)法直接訪問(wèn)或修改私有成員。私有成員通常用于隱藏類的實(shí)現(xiàn)細(xì)節(jié),以防止外部代碼直接訪問(wèn)和修改內(nèi)部數(shù)據(jù),從而提高類的封裝性和安全性。
總的來(lái)說(shuō),公有成員提供了對(duì)外部代碼的接口,而私有成員隱藏了類的實(shí)現(xiàn)細(xì)節(jié),使得類的內(nèi)部狀態(tài)和行為對(duì)外部代碼不可見。
3. 什么是拷貝構(gòu)造函數(shù)?它何時(shí)被調(diào)用?
- 拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),用于創(chuàng)建一個(gè)新對(duì)象并將其初始化為另一個(gè)同類對(duì)象的副本。它的函數(shù)簽名通常是類名(const 類名
&obj),其中參數(shù)是對(duì)同類對(duì)象的引用。拷貝構(gòu)造函數(shù)通常在以下情況下被調(diào)用:
- 當(dāng)使用一個(gè)對(duì)象來(lái)初始化另一個(gè)對(duì)象時(shí),會(huì)調(diào)用拷貝構(gòu)造函數(shù)。
- 當(dāng)把一個(gè)對(duì)象作為參數(shù)傳遞給函數(shù),以值傳遞的方式傳遞對(duì)象時(shí),也會(huì)調(diào)用拷貝構(gòu)造函數(shù)。
- 當(dāng)從函數(shù)返回一個(gè)對(duì)象時(shí),也可能會(huì)調(diào)用拷貝構(gòu)造函數(shù)。
- 拷貝構(gòu)造函數(shù)的作用是創(chuàng)建一個(gè)新的對(duì)象,并將其初始化為另一個(gè)對(duì)象的副本,以確保在這些情況下對(duì)象的數(shù)據(jù)成員得到正確復(fù)制,而不是簡(jiǎn)單地復(fù)制對(duì)象的地址。
二、代碼題
例題1:
- 聲明一個(gè)名為Tree的類,它有數(shù)據(jù)成員age(樹齡),有成員函數(shù)grow(int year),用于計(jì)算經(jīng)過(guò)year這么多年的成長(zhǎng)后樹的最新年齡,以及GetAge(),用于提取樹的年齡,并定義構(gòu)造函數(shù)用于初始化tree對(duì)象的屬性
class Tree {
private:int age; // 樹齡public:// 構(gòu)造函數(shù),初始化樹的年齡Tree(int initialAge) : age(initialAge) {}// 成長(zhǎng)函數(shù),計(jì)算經(jīng)過(guò)year年后的樹的最新年齡void grow(int years) {age += years;}// 獲取樹的年齡int getAge() {return age;}
};
例題2:
- 創(chuàng)建一個(gè)類,模仿基本數(shù)據(jù)類型的部分功能,將這個(gè)類命名為Integer(注意,這和表示整數(shù)類型的int大小寫不同)。Integer類擁有整型數(shù)據(jù)成員value(數(shù)值),還有一些成員函數(shù),比如顯示一個(gè)Integer對(duì)象的值,以及將兩個(gè)Integer對(duì)象相加。要求定義構(gòu)造函數(shù)用于初始化Integer對(duì)象的值
#include <iostream>class Integer {
private:int value; // 整型數(shù)值public:// 構(gòu)造函數(shù),用于初始化整數(shù)值Integer(int v) : value(v) {}// 顯示Integer對(duì)象的值void displayValue() {std::cout << "The value is: " << value << std::endl;}// 將兩個(gè)Integer對(duì)象相加Integer add(const Integer& other) {return Integer(value + other.value);}
};
例題3:
- 創(chuàng)建一個(gè)類,模仿基本數(shù)據(jù)類型的部分功能,將這個(gè)類命名為Integer(注意,這和表示整數(shù)類型的int大小寫不同)。Integer類擁有整型數(shù)據(jù)成員value(數(shù)值),還有一些成員函數(shù),比如顯示一個(gè)Integer對(duì)象的值,以及將兩個(gè)Integer對(duì)象相加。要求定義構(gòu)造函數(shù)用于初始化Integer對(duì)象的值
#include <iostream>class Integer {
private:int value; // 整型數(shù)值public:// 構(gòu)造函數(shù),用于初始化整數(shù)值Integer(int v) : value(v) {}// 顯示Integer對(duì)象的值void displayValue() {std::cout << "The value is: " << value << std::endl;}// 將兩個(gè)Integer對(duì)象相加Integer add(const Integer& other) {return Integer(value + other.value);}
};
例題4:
- 考慮幾何圖形圓,它有屬性:半徑,行為:獲取半徑值,計(jì)算周長(zhǎng),計(jì)算面積,輸出圓的相關(guān)信息。根據(jù)上述分析,請(qǐng)聲明并實(shí)現(xiàn)一個(gè)Circle類
#include <iostream>class Circle {
private:double radius; // 半徑public:// 構(gòu)造函數(shù),用于初始化半徑Circle(double r) : radius(r) {}// 獲取半徑值double getRadius() {return radius;}// 計(jì)算周長(zhǎng)double calculatePerimeter() {return 2 * 3.14159 * radius;}// 計(jì)算面積double calculateArea() {return 3.14159 * radius * radius;}// 輸出圓的相關(guān)信息void printInfo() {std::cout << "Circle Information:" << std::endl;std::cout << "Radius: " << radius << std::endl;std::cout << "Perimeter: " << calculatePerimeter() << std::endl;std::cout << "Area: " << calculateArea() << std::endl;}
};
例題5:
- 編寫一個(gè)程序,設(shè)計(jì)一個(gè)類Score用于統(tǒng)計(jì)一個(gè)班的學(xué)生成績(jī),其中定義一個(gè)靜態(tài)數(shù)據(jù)成員totalScore存儲(chǔ)總分,一個(gè)靜態(tài)成員函數(shù)GetTotalScore( )實(shí)現(xiàn)對(duì)該靜態(tài)數(shù)據(jù)成員的訪問(wèn)
#include <iostream>class Score {
private:static int totalScore; // 靜態(tài)數(shù)據(jù)成員,存儲(chǔ)總分public:// 靜態(tài)成員函數(shù),實(shí)現(xiàn)對(duì)靜態(tài)數(shù)據(jù)成員的訪問(wèn)static int GetTotalScore() {return totalScore;}
};// 靜態(tài)數(shù)據(jù)成員的定義和初始化
int Score::totalScore = 0;int main() {// 假設(shè)有一些學(xué)生成績(jī)需要統(tǒng)計(jì)int scores[] = {80, 90, 75, 85, 95};// 統(tǒng)計(jì)總分for (int i = 0; i < 5; i++) {Score::totalScore += scores[i];}// 輸出總分std::cout << "Total score: " << Score::GetTotalScore() << std::endl;return 0;
}
例題6:
- 創(chuàng)建一個(gè)名為Time的類,它包括分別表示小時(shí)、分鐘和秒的int類型的數(shù)據(jù)成員以及兩個(gè)構(gòu)造函數(shù),一個(gè)構(gòu)造函數(shù)將這個(gè)數(shù)據(jù)初始化為0,另一個(gè)將它初始化為一個(gè)固定的值。另有一成員函數(shù)將時(shí)間以11:59:59的格式顯示在屏幕上。
#include <iostream>class Time {
private:int hours;int minutes;int seconds;public:// 默認(rèn)構(gòu)造函數(shù),將時(shí)間初始化為0Time() : hours(0), minutes(0), seconds(0) {}// 帶參數(shù)的構(gòu)造函數(shù),將時(shí)間初始化為給定值Time(int h, int m, int s) : hours(h), minutes(m), seconds(s) {}// 顯示時(shí)間在屏幕上void displayTime() {std::cout << "Time: " << hours << ":" << minutes << ":" << seconds << std::endl;}
};
- 構(gòu)造函數(shù)用缺省值的形式來(lái)寫
#include <iostream>class Time {
private:int hours;int minutes;int seconds;public:// 默認(rèn)構(gòu)造函數(shù),將時(shí)間初始化為0Time(int h = 0, int m = 0, int s = 0) : hours(h), minutes(m), seconds(s) {}// 顯示時(shí)間在屏幕上void displayTime() {std::cout << "Time: " << hours << ":" << minutes << ":" << seconds << std::endl;}
};
例題7:
- 編寫一個(gè)學(xué)生和教師數(shù)據(jù)輸入和顯示程序,學(xué)生數(shù)據(jù)有編號(hào)、姓名、班號(hào)和成績(jī),教師數(shù)據(jù)有編號(hào)、姓名、職稱和部門。要求將編號(hào)、姓名輸入和顯示設(shè)計(jì)成一個(gè)類person,并作為學(xué)生數(shù)據(jù)操作類student和教師數(shù)據(jù)操作類teacher的父類。試編程實(shí)現(xiàn),并將編寫的代碼貼到原代碼處。
#include <iostream>
#include <string>// 父類 Person
class Person {
protected:int id;std::string name;public:void inputPersonData() {std::cout << "Enter ID: ";std::cin >> id;std::cout << "Enter Name: ";std::cin >> name;}void displayPersonData() {std::cout << "ID: " << id << std::endl;std::cout << "Name: " << name << std::endl;}
};// 子類 Student
class Student : public Person {
private:int classNumber;int score;public:void inputStudentData() {inputPersonData();std::cout << "Enter Class Number: ";std::cin >> classNumber;std::cout << "Enter Score: ";std::cin >> score;}void displayStudentData() {displayPersonData();std::cout << "Class Number: " << classNumber << std::endl;std::cout << "Score: " << score << std::endl;}
};// 子類 Teacher
class Teacher : public Person {
private:std::string title;std::string department;public:void inputTeacherData() {inputPersonData();std::cout << "Enter Title: ";std::cin >> title;std::cout << "Enter Department: ";std::cin >> department;}void displayTeacherData() {displayPersonData();std::cout << "Title: " << title << std::endl;std::cout << "Department: " << department << std::endl;}
};int main() {Student student;Teacher teacher;std::cout << "Enter Student Data:" << std::endl;student.inputStudentData();std::cout << std::endl;std::cout << "Enter Teacher Data:" << std::endl;teacher.inputTeacherData();std::cout << std::endl;std::cout << "Student Data:" << std::endl;student.displayStudentData();std::cout << std::endl;std::cout << "Teacher Data:" << std::endl;teacher.displayTeacherData();return 0;
}