จะส่งอาร์กิวเมนต์ทางเลือกไปยังเมธอดใน C ++ ได้อย่างไร? ข้อมูลโค้ดใด ๆ ...
จะส่งอาร์กิวเมนต์ทางเลือกไปยังเมธอดใน C ++ ได้อย่างไร? ข้อมูลโค้ดใด ๆ ...
คำตอบ:
นี่คือตัวอย่างของโหมดการส่งผ่านเป็นพารามิเตอร์เสริม
void myfunc(int blah, int mode = 0)
{
if (mode == 0)
do_something();
else
do_something_else();
}
คุณสามารถโทรหา myfunc ได้ทั้งสองวิธีและใช้ได้ทั้งคู่
myfunc(10); // Mode will be set to default 0
myfunc(10, 1); // Mode will be set to 1
NULL
0
หมายถึงตัวชี้โมฆะแม้ว่ามันจะถูกกำหนดให้เป็นตัวอักษร ไม่ใช่ชื่อสากลสำหรับศูนย์คงที่ สำหรับจำนวนเต็ม (ไม่ใช่ตัวชี้) int mode = 0
คุณควรใช้ตัวเลข:
กฎที่สำคัญเกี่ยวกับการใช้พารามิเตอร์เริ่มต้น:
ควรระบุพารามิเตอร์เริ่มต้นที่ด้านขวาสุดเมื่อคุณระบุพารามิเตอร์ค่าเริ่มต้นแล้วคุณจะไม่สามารถระบุพารามิเตอร์ที่ไม่ใช่ค่าเริ่มต้นได้อีก เช่น:
int DoSomething(int x, int y = 10, int z) -----------> Not Allowed
int DoSomething(int x, int z, int y = 10) -----------> Allowed
int foo(int x, int y = 10, int z = 10)
และต้องการโทรfoo(1,2)
ดังนั้นจึงให้พารามิเตอร์ที่เป็นทางเลือกเพียงตัวเดียว ดูเหมือนฉันจะไม่สามารถทำให้มันทำงานได้ด้วยตัวเอง
อาจเป็นเรื่องที่น่าสนใจสำหรับคุณบางคนในกรณีที่มีพารามิเตอร์เริ่มต้นหลายตัว:
void printValues(int x=10, int y=20, int z=30)
{
std::cout << "Values: " << x << " " << y << " " << z << '\n';
}
ให้การเรียกใช้ฟังก์ชันต่อไปนี้:
printValues(1, 2, 3);
printValues(1, 2);
printValues(1);
printValues();
มีการสร้างเอาต์พุตต่อไปนี้:
Values: 1 2 3
Values: 1 2 30
Values: 1 20 30
Values: 10 20 30
อ้างอิง: http://www.learncpp.com/cpp-tutorial/77-default-parameters/
ใช้พารามิเตอร์เริ่มต้น
template <typename T>
void func(T a, T b = T()) {
std::cout << a << b;
}
int main()
{
func(1,4); // a = 1, b = 4
func(1); // a = 1, b = 0
std::string x = "Hello";
std::string y = "World";
func(x,y); // a = "Hello", b ="World"
func(x); // a = "Hello", b = ""
}
หมายเหตุ: สิ่งต่อไปนี้เป็นรูปแบบที่ไม่ดี
template <typename T>
void func(T a = T(), T b )
template <typename T>
void func(T a, T b = a )
ในการทำตามตัวอย่างที่ให้ไว้ที่นี่ แต่เพื่อชี้แจงไวยากรณ์ด้วยการใช้ไฟล์ส่วนหัวการประกาศฟังก์ชันไปข้างหน้าจะมีค่าดีฟอลต์ของพารามิเตอร์ที่เป็นทางเลือก
myfile.h
void myfunc(int blah, int mode = 0);
myfile.cpp
void myfunc(int blah, int mode) /* mode = 0 */
{
if (mode == 0)
do_something();
else
do_something_else();
}
โดยใช้เครื่องหมายจุลภาคคั่นเช่นเดียวกับพารามิเตอร์ที่ไม่มีค่าเริ่มต้น
int func( int x = 0, int y = 0 );
func(); // doesn't pass optional parameters, defaults are used, x = 0 and y = 0
func(1, 2); // provides optional parameters, x = 1 and y = 2
โดยทั่วไปโดยการตั้งค่าเริ่มต้นสำหรับพารามิเตอร์:
int func(int a, int b = -1) {
std::cout << "a = " << a;
if (b != -1)
std::cout << ", b = " << b;
std::cout << "\n";
}
int main() {
func(1, 2); // prints "a=1, b=2\n"
func(3); // prints "a=3\n"
return 0;
}
ด้วยการแนะนำ std :: ทางเลือกใน C ++ 17 คุณสามารถส่งผ่านอาร์กิวเมนต์ที่เป็นทางเลือก:
#include <iostream>
#include <string>
#include <optional>
void myfunc(const std::string& id, const std::optional<std::string>& param = std::nullopt)
{
std::cout << "id=" << id << ", param=";
if (param)
std::cout << *param << std::endl;
else
std::cout << "<parameter not set>" << std::endl;
}
int main()
{
myfunc("first");
myfunc("second" , "something");
}
เอาท์พุต:
id=first param=<parameter not set>
id=second param=something